这里有java代码
static String md5(byte[] bArr) {
MessageDigest instance = MessageDigest.getInstance("MD5");
instance.update(bArr);
byte[] digest = instance.digest();
StringBuffer sb = new StringBuffer();
for (byte b : digest) {
sb.append(Integer.toHexString(b & 0xffffffff));
}
return sb.toString();
}
打电话给md5("A".getBytes())
,我得到了
7fffffffc56270ffffffe7ffffffa7fffffffa81a5935ffffffb72effffffacffffffbe29
如何通过Python实现相同的结果? 我试着用下面的方法
m = hashlib.md5()
m.update(str.encode('utf-8'))
bytes = m.digest()
return ''.join('{:02x}'.format(x) for x in bytes)
我得到
7fc56270e7a70fa81a5935b72eacbe29
这和m.hexdigest()
是一样的
编辑: 问题看起来是介于这些“负”字节之间。 例如 在Java中,第二个字节在int中是“-59”,但Python无法识别 第5个字节是“-25”
那些“f”是因为它们是负数
java版本是。。。奇怪的它获取每个字节,将其加宽为一个整数,然后获取整数的补码,并对其进行格式化。这就像一个使有符号字节无符号的坏版本
这在Python中首先是完全不必要的,因为字节总是无符号的。但是如果你真的想要它,你可以把
x | 0xffffff00
格式化成十六进制(它将用6ff
填充字节)相关问题 更多 >
编程相关推荐