[英]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.