Tôi đang cố gắng so sánh hai chuỗi khác nhau được mã hóa bởi sha512. Nhưng, kết quả là khác nhau. Nó có thể là một vấn đề mã hóa tôi có nghĩa là. Tôi hy vọng bạn có thể giúp tôi.Chuỗi SHA-512 Mã hóa: C# và kết quả JAVA khác nhau
Đây là mã Java của tôi:
MessageDigest digest = java.security.MessageDigest.getInstance("SHA-512");
digest.update(MyString.getBytes());
byte messageDigest[] = digest.digest();
// Create Hex String
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < messageDigest.length; i++) {
String h = Integer.toHexString(0xFF & messageDigest[i]);
while (h.length() < 2)
h = "0" + h;
hexString.append(h);
}
return hexString.toString();
và, đây là mã C# của tôi:
UnicodeEncoding UE = new UnicodeEncoding();
byte[] hashValue;
byte[] message = UE.GetBytes(MyString);
SHA512Managed hashString = new SHA512Managed();
string hex = "";
hashValue = hashString.ComputeHash(message);
foreach (byte x in hashValue)
{
hex += String.Format("{0:x2}", x);
}
return hex;
đâu là vấn đề? Thx nhiều kẻ
CẬP NHẬT
Nếu tôi không chỉ định kiểu mã hóa, nó giả Unicode tôi nghĩ. Kết quả là thế này (mà không chỉ định bất cứ điều gì):
Java SHA: a99951079450e0bf3cf790872336b3269da580b62143af9cfa27aef42c44ea09faa83e1fbddfd1135e364ae62eb373c53ee4e89c69b54a7d4d268cc2274493a8
C# SHA: 70e6eb559cbb062b0c865c345b5f6dbd7ae9c2d39169571b6908d7df04642544c0c4e6e896e6c750f9f135ad05280ed92b9ba349de12526a28e7642721a446aa
Thay vào đó, nếu tôi chỉ định UTF-16 trong Java:
Java UTF-16: SHA f7a587d55916763551e9fcaafd24d0995066371c41499fcb04614325cd9d829d1246c89af44b98034b88436c8acbd82cd13ebb366d4ab81b4942b720f02b0d9b
Đó là luôn luôn khác nhau !!!
Điều gì sẽ xảy ra khi bạn chỉ định mã hóa trong 'MyString.getBytes()'? (Bad variable name, btw.) –
Bạn đã so sánh các byte của 'MyString' trước khi tính toán băm? –
Nó sẽ là tốt đẹp để cung cấp cho chúng tôi mã mẫu đầy đủ và đầu vào/đầu ra của bạn là tốt. – birryree