2011-09-26 122 views
0

`我想用.net对我的字符串进行编码并将其传递给java程序。我正在使用相同的程序进行双方的加密和解密。但是java程序和.net程序正在返回不同的MD5哈希码。.net和java的不同MD5哈希值

这里是我的两个程序代码:

VB.net

md5Provider = New MD5CryptoServiceProvider() 
input = UTF8Encoding.UTF8.GetBytes(sSecurityKey) 
oHash = oMd5CryptoServiceProvider.ComputeHash(input) 

的Java

MessageDigest m; 
m = MessageDigest.getInstance("MD5"); 
byte[] UTF8bytes = key.getBytes("UTF8"); 
m.update(UTF8bytes,0,UTF8bytes.length); 

编辑:散列计算,运用vb.net是 {170,226,106,33,183 ,52,99,154,17,225,135,139,170,141,116,108}

m.digest()我得到在java中是 {-44,29,-116,-39,-113,0,-78,4,-23,-128,9,104,-20,-8,66,126}

问题是来自java的m.digest()和来自vb.net的oHash是不同的。所以我不能进一步使用DES加密。

任何帮助表示赞赏。

+0

你可以粘贴哈希... – usoban

回答

1

最后我找到了答案。我只是将Md5哈希转换成BigInteger,然后转换成一个字节数组。现在,当我通过它作为DES算法的关键时,我得到了我想要的输出。

3

您可能希望逐字节比较来自两个摘要方法的输入。这是来自VB.net的input和来自Java的UTF8bytes。很可能它们会不同(例如,可能是VB.net的一些编码细节)。另外,你如何比较结果?

+0

我已经从这两个程序中添加哈希 – Sandeep

+0

更有趣的是确保输入完全相同。它可能只是一个额外的字节,如0或行尾,散列会完全不同。 –

+0

此外,由于Java没有无符号字节,您可能需要正确转换它。因为VB清楚地显示无符号字节。 –