【发布时间】:2024-01-09 21:56:02
【问题描述】:
这是在使用各种语言的 MD5 库时有关字符编码的一般问题。我担心的是:假设我使用原生 Python 字符串对象生成 MD5 哈希,如下所示:
message = "hello world"
m = md5()
m.update(message)
然后我使用 MD5 哈希的十六进制版本:
m.hexdigest()
并通过网络发送消息和 MD5 哈希,比如 JMS 消息或 HTTP 请求。
现在我在 Java 程序中以原生 Java 字符串的形式收到此消息,以及校验和。然后我使用 Java 生成一个 MD5 哈希,如下所示(使用 Commons Codec 库):
String md5 = org.apache.commons.codec.digest.DigestUtils.DigestUtils.md5Hex(s)
我的感觉是这是错误的,因为我没有在两端指定字符编码。所以原始哈希将基于字符串的 Python 版本的字节数; Java 版本将基于字符串的 Java 版本的字节,这两个字节序列通常不会相同 - 对吗?所以我真的需要在两端指定“UTF-8”或任何东西吗?
(实际上,我的代码中出现 MD5 校验和失败的间歇性错误,我怀疑这就是原因 - 但由于它是间歇性的,很难说更改它是否可以解决问题。)
谢谢!
【问题讨论】:
标签: encoding utf-8 md5 set character