मैं sha512 द्वारा एन्कोड किए गए दो अलग-अलग स्ट्रिंग की तुलना करने की कोशिश कर रहा हूं। लेकिन, परिणाम अलग है। यह मेरा मतलब है एक एनकोड समस्या हो सकती है। मुझे आशा है आप मेरी मदद कर सकते हैं।स्ट्रिंग SHA-512 एन्कोडिंग: सी # और जावा परिणाम अलग है
यह मेरा जावा कोड है:
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();
और, यह मेरी सी # कोड है:
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;
समस्या कहां है? Thx ज्यादा लोग
अद्यतन
मैं एन्कोडिंग प्रकार निर्दिष्ट नहीं करते हैं, यह यूनिकोड मुझे लगता है कि supposes। अगर मैं जावा में UTF-16 के निर्दिष्ट करते हैं,
Java SHA: a99951079450e0bf3cf790872336b3269da580b62143af9cfa27aef42c44ea09faa83e1fbddfd1135e364ae62eb373c53ee4e89c69b54a7d4d268cc2274493a8
C# SHA: 70e6eb559cbb062b0c865c345b5f6dbd7ae9c2d39169571b6908d7df04642544c0c4e6e896e6c750f9f135ad05280ed92b9ba349de12526a28e7642721a446aa
बजाय: परिणाम (कुछ भी निर्दिष्ट किए बिना) यह है
Java UTF-16: SHA f7a587d55916763551e9fcaafd24d0995066371c41499fcb04614325cd9d829d1246c89af44b98034b88436c8acbd82cd13ebb366d4ab81b4942b720f02b0d9b
यह हमेशा अलग है !!!
क्या होता है जब आप 'MyString.getBytes()' में एन्कोडिंग निर्दिष्ट करते हैं? (खराब परिवर्तनीय नाम, बीटीडब्ल्यू।) –
क्या आपने हैश कंप्यूटिंग से पहले 'मायस्ट्रिंग' के बाइटों की तुलना की है? –
हमें पूर्ण कोड नमूने और आपके इनपुट/आउटपुट भी प्रदान करना अच्छा लगेगा। – birryree