Java和C#之间的SHA1哈希结果不同
我有一个大问题。我使用此C#函数对消息进行编码:
byte[] buffer = Encoding.ASCII.GetBytes(file_or_text);SHA1CryptoServiceProvider cryptoTransformSHA1 = new SHA1CryptoServiceProvider();
String hashText = BitConverter.ToString(cryptoTransformSHA1.ComputeHash(buffer)).Replace("-", "");
在Java方面,我使用以下代码段:
MessageDigest md = MessageDigest.getInstance("SHA-1");byte[] sha1hash = new byte[40];
md.update(text.getBytes("iso-8859-1"), 0, text.length());
sha1hash = md.digest();
我的消息是:阻止|注释|文本!£$%&/()=?^€> <{}ç°§;:_-。,@#ùàòè+
我有这个结果:
(C#) 8EDC7F756BCECDB99B045FA3DEA2E36AA0BF0875(Java) 2a566428826539365bb2fe2197da91395c2b1b72
你能帮我吗??谢谢…
回答:
我的猜测是您似乎正在将ASCII字节与Latin1字节进行比较。尝试切换
md.update(text.getBytes("iso-8859-1"), 0, text.length());
对此
md.update(text.getBytes("ISO646-US"), 0, text.length());
那可能会解决您的问题。
(或切换C#以使用Latin1)
程序中发生的事情GetBytes
是,根据编码,相同字符的方法将返回不同的值,因此我们漂亮的SHA1哈希算法将传递不同的参数,从而导致不同的返回值。
以上是 Java和C#之间的SHA1哈希结果不同 的全部内容, 来源链接: utcz.com/qa/422341.html