Java和C#之间不同的SHA1哈希结果 [英] Different SHA1 Hash result between Java and C#
问题描述
我使用这个C#函数来编码我的消息:
pre $ 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();
我的信息是:Block | Notes | Text!£$%& /()=?^ < {}ç°§;:_-。,@#ùàòè+
我有这样的结果:
(C#)8EDC7F756BCECDB99B045FA3DEA2E36AA0BF0875
(Java)2a566428826539365bb2fe2197da91395c2b1b72
你能帮我吗?
Thanks ...
我的猜测是你似乎在比较ASCII字节和Latin1字节。尝试切换
md.update(text.getBytes(iso-8859-1),0,text.length() ); b
code> md.update(text.getBytes(ISO646-US),0,text.length());
这可能会解决您的问题。
(或将C#切换为使用Latin1)
您的程序中出现了什么情况,您的 GetBytes
相同的字符取决于编码,所以我们漂亮的SHA1哈希算法正在通过不同的参数导致不同的返回值。
I've a big problem. I using this C# function to encode my message:
byte[] buffer = Encoding.ASCII.GetBytes(file_or_text);
SHA1CryptoServiceProvider cryptoTransformSHA1 = new SHA1CryptoServiceProvider();
String hashText = BitConverter.ToString(cryptoTransformSHA1.ComputeHash(buffer)).Replace("-", "");
On java side, I use this snippet:
MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] sha1hash = new byte[40];
md.update(text.getBytes("iso-8859-1"), 0, text.length());
sha1hash = md.digest();
My message is: Block|Notes|Text !£$%&/()=?^€><{}ç°§;:_-.,@#ùàòè+
I have this result:
(C#) 8EDC7F756BCECDB99B045FA3DEA2E36AA0BF0875
(Java) 2a566428826539365bb2fe2197da91395c2b1b72
Can you help me please?? Thanks...
My guess is you seem to be comparing ASCII bytes to Latin1 bytes. Try switching
md.update(text.getBytes("iso-8859-1"), 0, text.length());
to this
md.update(text.getBytes("ISO646-US"), 0, text.length());
That might solve your problem.
(Or switch C# to use Latin1)
What is happening in your program your GetBytes
method is returning different values for the same characters depending on encoding, so our nifty SHA1 hash algorithm is getting passed different parameters resulting in different return values.
这篇关于Java和C#之间不同的SHA1哈希结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!