这是关于在各种语言中使用MD5库时字符编码的一般问题。我担心的是:假设我生成使用原生Python字符串对象的MD5哈希值,像这样:生成MD5散列跨平台时的字符编码问题
message = "hello world"
m = md5()
m.update(message)
然后我采取的MD5哈希的十六进制版本使用:
m.hexdigest()
和发送邮件& MD5散列通过网络,比方说,一个JMS消息或HTTP请求。
现在我在Java程序中以本地Java字符串的形式获取此消息以及校验和。然后,我生成使用Java的MD5哈希值,像这样(使用共享编解码器库):
String md5 = org.apache.commons.codec.digest.DigestUtils.DigestUtils.md5Hex(s)
我的感觉是,这是错误的,因为我还没有在任何一端指定的字符encodng。所以原始的散列将基于Python版本的字符串的字节; Java中的一个将基于Java版本字符串的字节,这两个字节序列通常不会相同 - 是吗?所以我真的需要指定“UTF-8”或任何两端的权利?
(我实际上得到在我的代码,其中的MD5校验失败的间歇性的错误,我怀疑这是什么原因 - 但因为它是间歇性的,这是很难说,如果改变这种修复与否)
谢谢!