6

Javaを使用してHMAC-SHA256を使用して文字列をエンコードしようとしています。を使用して Python によって生成されたエンコードされた文字列の別のセットと一致するために必要なエンコードされた文字列hmac.new(mySecret, myPolicy, hashlib.sha256).hexdigest()。私が試してみました

    Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
    SecretKeySpec secretKey = new SecretKeySpec(secret.getBytes(), "HmacSHA256");
    sha256_HMAC.init(secretKey);

    byte[] hash = sha256_HMAC.doFinal(policy.getBytes());
    byte[] hexB = new Hex().encode(hash);
    String check = Hex.encodeHexString(hash);
    String sha256 = DigestUtils.sha256Hex(secret.getBytes());

それらを印刷した後、hash、hexB、check、および sha256 は、次の Python 暗号化方法と同じ結果を提供しませんでした

hmac.new(mySecret, myPolicy, hashlib.sha256).hexdigest()

そのため、上記の Python 関数と同様に機能するライブラリまたは何かを探してみました。誰でも私を助けることができますか?

4

1 に答える 1

11

キーと入力が同一であり、Java と Python の両方で正しくエンコードされていることを確認してください。

HMAC-SHA256 は、両方のプラットフォームで同じように機能します。

ジャワ

Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secretKey = new SecretKeySpec("1234".getBytes(), "HmacSHA256");
sha256_HMAC.init(secretKey);
byte[] hash = sha256_HMAC.doFinal("test".getBytes());
String check = Hex.encodeHexString(hash);
System.out.println(new String(check));

Output
24c4f0295e1bea74f9a5cb5bc40525c8889d11c78c4255808be00defe666671f

パイソン

print hmac.new("1234", "test", hashlib.sha256).hexdigest();

Output
24c4f0295e1bea74f9a5cb5bc40525c8889d11c78c4255808be00defe666671f
于 2013-07-30T14:12:31.413 に答える