Java和C#之间不同的SHA1哈希结果 [英] Different SHA1 Hash result between Java and C#

查看:122
本文介绍了Java和C#之间不同的SHA1哈希结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个很大的问题。
我使用这个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆