Java和Python生成不同的HmacSHA256输出

2024-09-30 16:30:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在Python中生成与Java模板中相同的Hmac-SHA256签名。但是Python脚本生成的输出不同。我找不到我的错误。有人能帮我吗?在

爪哇

public class Main {
    public static void main(String[] args) {
        String paramString = "teststring";
        calculateSignature(hash(paramString));
    }

    private static byte[] hash(String paramString)
    {
        MessageDigest localMessageDigest = MessageDigest.getInstance("SHA-256");
        localMessageDigest.update(paramString.getBytes("UTF-8"));
        byte[] paramByte = localMessageDigest.digest();
        System.out.println("Hash: " + DatatypeConverter.printBase64Binary(paramByte));
        return paramByte;
    }

    public static void calculateSignature(byte[] paramArrayOfByte)
    {
        String Algor = "HmacSHA256";
        Mac localMac = Mac.getInstance(Algor);
        byte [] key = "secretkey".getBytes();
        localMac.init(new SecretKeySpec(key, Algor));
        paramArrayOfByte = localMac.doFinal(paramArrayOfByte);
        System.out.println("Signature: " + DatatypeConverter.printBase64Binary(paramArrayOfByte));
    }
}

Hash: PIcn4BmkK0RGZ6WHtgASUb7K2ruza/7YCHqSwYiC0RE=

Signature: X8V4RA7qaoVGz5K2l61gAXNPuLkAI7NZ9/9d7WnblbA=

Python

^{pr2}$

Hash: PIcn4BmkK0RGZ6WHtgASUb7K2ruza/7YCHqSwYiC0RE=

Signature: NE8RtuFsOtafWrwDdlzILMgqCDm2huJ9A3IO6iy44Jc=


Tags: stringstatichashbytepublicsignaturevoidparamstring
1条回答
网友
1楼 · 发布于 2024-09-30 16:30:58

问题是在python代码中,返回base64 encoded,而在java中,只将其打印为base64 encoded,但返回时没有。在

尝试:

private static byte[] hash(String paramString)
{
    MessageDigest localMessageDigest = MessageDigest.getInstance("SHA-256");
    localMessageDigest.update(paramString.getBytes("UTF-8"));
    byte[] paramByte = localMessageDigest.digest();
    String base64Binary = DatatypeConverter.printBase64Binary(paramByte);
    System.out.println("Hash: " + base64Binary);
    return base64Binary.getBytes();
}

或者将python代码修改为:

^{pr2}$

相关问题 更多 >