我需要在Groovy(Grails)中创建一个MD5哈希,它提供的结果与我在C#中的结果完全相同
C#代码使用MD5功能
tmpHash = new MD5CryptoServiceProvider().ComputeHash(tmpIn);
我可以使用groovy中的哪些功能?
我试过
licenseKeys = MessageDigest.getInstance("MD5").digest(tempAr).encodeHex()
但是这给了我几乎相同的结果,有时它在不同的位置有额外的零,其余的代码并不重要因为它只是将字符串转换为字节而且我知道MD5是旧的且不安全但仍然必须使用它
当输入 AAAAAAAA 时,c#输出为
87D746DB2DB357978BC97C92123622
并且在groovy中
87D746DB2D0B357978BC970C92123622
但输入为 AAAAA 的情况与之相同 C94EE213E7FA6887256D143E924227C4
在groovy中获取tempAr我这样做
byte[] array = temp.getBytes("UTF-8")
byte[] tempAr = new byte[array.size() * 2]
// to add 0 after each byte
for (int i = 0; i < tempAr.size(); i++){
if (!(i%2)){
tempAr[i] = array[((int)(i * 0.5))]
}
else{
tempAr[i] = 0
}
}
我这样做,因为旧的c#代码也是如此,我知道它很奇怪......
获取字节的c#代码是
tmpIn = UnicodeEncoding.Unicode.GetBytes(txtFirstname.Text + txtLastname.Text);
答案 0 :(得分:0)
问题是C#版本没有显示“0”字符。结果应该是16个字节,显示为十六进制的32个字符,C#结果很短。
87D746DB2D B357978BC97 C92123622 C# 87D746DB2D0B357978BC970C92123622 groovy
显示代码出错。
注意:
C94EE213E7FA6887256D143E924227C4是相同的,因为C#或groovy显示中没有“0”字符。