簡體   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