Python和Java的sha1加密结果不同

1 投票
1 回答
1924 浏览
提问于 2025-04-17 05:02

我有一个应用程序,需要用到sha1加密,但在Python和Java中得到的结果不一样,Java的结果是正确的。因为在Python中没有字节对象,而Java使用字节来进行哈希计算。那我该怎么用Python得到正确的结果呢?

1 个回答

3

和往常一样,问题的关键不在于摘要的实现(这些在主要的库中都有详细的文档和正确的实现)。关键在于你如何表示得到的数据。

md.digest()会返回一个byte[],里面是摘要生成的二进制数据。

new String(md.digest())试图把这些字节当作文本来解释,使用的是平台默认的编码,这几乎肯定不是你想要的结果。

可能希望把摘要表示成十六进制或Base64编码。

试试这个(确保导入javax.xml.bind.DatatypeConverter):

String result = DatatypeConverter.printHexBinary(md.digest());

另外,如果你需要Base64编码,可以使用printBase65Binary()来代替。

撰写回答