与服务商进行java服务的对接,遇到签名时出现了问题,双方的签名始终不一致,经实验发现双方在单引号、双引号、小于号、大于号四个ASC字符上编码有误,在网上查找,发现两个提供在线MD5编码服务的网站:
http://tool.chinaz.com/Tools/MD5.aspx
该网站还用.net写的,其输出的MD5编码跟本人用.net生成的编码有误。
而下面的网站:
http://www.zzbang.cn/tools/md5
则是一致的。
请问这样的现象正常吗?
有意思的是,同一个网站两个页面,MD5居然是不同的:
http://tool.chinaz.com/Tools/MD5.aspx
对那4个字符编码跟我生成的不一致。
http://tool.chinaz.com/Tools/hash.aspx
则是正确的。
正常,.NET 和 JAVA 中的 string 对象都是 UNICODE,但是要 MD5 的话,需要转换成 byte[],这时候就涉及到编码,也就是转换出来的 byte[] 可能是 UTF-16,UTF-8,GB2312 或者别的。
拜托看清楚问题好不?中文都通过了,就在4个asc字符出现问题。
请问,除了UNICODE编码外,有哪种常见的编码其byte表示是不同的?
而且,第一个网站明显是用.net开发的,怎么也会这样?
@519740105: 这只能说明其中一个的算法实现有BUG,为了保证正确性,我采用了 openssl-1.0.1e 库来测试 MD5 算法,经测试证实,字符['|"|<|>]([34|39|60|62])的 MD5 HASH 值同 http://tool.chinaz.com/Tools/hash.aspx 一样,这也同 .NET 平台上的 MD5CryptoServiceProvider 的计算结果是一致的。
@Launcher: 开始没发现hash这个页面。如果发现了这个页面,也就不会有问题了。
还是非常感谢!
@Launcher 大神是博客园高级博文专家哇 无处不在。