繁体   English   中英

如何在 java SHA 256 算法中使用客户端数字签名 Hash 给定数据

[英]How to Hash a given data using clients digital signature in java SHA 256 Algorithm

我们希望 Hash 使用 java sha 256 位散列算法使用客户端数字签名的数据。

我们如何在 java 中进行散列时添加数字签名。

如果我理解正确,您想签署一些数据。 这是一个示例方法:

    public static String encode(String dataToEncode, String secret) throws InvalidKeyException, NoSuchAlgorithmException {
       byte[] decodedSecret = Base64.getDecoder().decode(secret);
       SecretKeySpec keySpec = new SecretKeySpec(decodedSecret, "HmacSHA256");
       Mac sha256 = Mac.getInstance("HmacSHA256");
       sha256.init(keySpec);
       return Base64.getEncoder().encodeToString(sha256.doFinal(dataToEncode.getBytes()));
}

秘密是 Base64 编码的密钥。 该方法返回Base64编码的hash数据。 Base64 部分是可选的,如果您不需要该编码,可以将其删除。 这是我在签署 REST API 调用加密交换时使用的方法。

以下解决方案通过应用 RSA PKCS#8 格式的私钥对字符串进行签名。 如果您的代码已将私钥作为文本从 pem 文件中读取,如下例所示:

-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDRxFWXGYDG8zKw
ihIS+Ydh/nWX9NwkFTKMRjH8BQ78ZEnXrnGJHvd+dI+zEiRo7rLuDXMOjsnhIR/O
....
+wqssDAApq+CiPcBnn0x2Vw=
-----END PRIVATE KEY-----

然后你需要去掉第一行和最后一行以及所有的换行符('\n')。 如果您的 privateKey 被读取(例如从 java 密钥库),您可以删除将私钥字符串转换为java.security.PrivateKey ZA8CFDE6331BD59EB2AC96F8911ZB4 的代码行。

    private static String signSHA256RSA(String inputStr, String inputKey) throws Exception {
        String key = inputKey.replaceAll("-----END PRIVATE KEY-----", "")
                .replaceAll("-----BEGIN PRIVATE KEY-----", "")
                .replaceAll("\n", "");
        byte[] keyBytes = Base64.getDecoder().decode(key);
        PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
        KeyFactory kf = KeyFactory.getInstance("RSA");
        PrivateKey privateKey = kf.generatePrivate(spec);
        Signature signature = Signature.getInstance("SHA256withRSA");
        signature.initSign(privateKey);
        signature.update(inputStr.getBytes("UTF-8"));
        byte[] s = signature.sign();
        return Base64.getEncoder().encodeToString(s);
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM