Ich versuche Funktion zu schreiben, für die von .net Funktion sha512 Zeichenfolge in Ziel zu schaffen, die.net vs Objective c SHA-512 Mismatch
istpublic static string GetSHA512(string strPlain)
{
UnicodeEncoding UE = new UnicodeEncoding();
byte[] HashValue = null;
byte[] MessageBytes = UE.GetBytes(strPlain);
System.Security.Cryptography.SHA512Managed SHhash = new System.Security.Cryptography.SHA512Managed();
string strHex = string.Empty;
HashValue = SHhash.ComputeHash(MessageBytes);
foreach (byte b in HashValue)
{
strHex += String.Format("{0:x2}", b);
}
return strHex;
}
Dies gibt Ergebnis als
input : pass123
output: 2a6353744cc2914c602265f50d2e413d0561368775756392517abb340ef75d52ee0c5d3623ddd1826fd768a13dca8961f5957c75df0d793b9d7537aabe050705
Was ich versucht haben, ist als
folgen-(NSString *)createSHA512:(NSString *)string
{
const char *cstr = [string cStringUsingEncoding:NSUTF8StringEncoding];
NSData *data = [NSData dataWithBytes:cstr length:string.length];
uint8_t digest[CC_SHA512_DIGEST_LENGTH];
CC_SHA512(data.bytes, data.length, digest);
NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA512_DIGEST_LENGTH];
for(int i = 0; i < CC_SHA512_DIGEST_LENGTH; i++)
[output appendFormat:@"%02x", digest[i]];
return output;
}
dieErgebnis unter
gibtinput : pass123
output: fd37ca5ca8763ae077a5e9740212319591603c42a08a60dcc91d12e7e457b024f6bdfdc10cdc1383e1602ff2092b4bc1bb8cac9306a9965eb352435f5dfe8bb0
Kann mir bitte jemand vorschlagen, was mache ich falsch?
Warum unterscheiden sich diese beiden Werte?
Bitte korrigieren Sie meine Fehler.
EDIT
Mittlere Während ich Codierung NSUTF16StringEncoding
und NSUnicodeStringEncoding
versucht haben, zu ändern, die noch andere Ergebnisse und als
input : pass123
output: 514331e3f7ca0a295539347ebccc4e4f095fe5f3c1df10d43b4d550144c7b30ba9507831893ea63ea22e62e993be529b0d14be7800a90aa0de199d6be62a5f1b
Vielen Dank für Ihre schnelle Antwort, aber wir sind in einem Stadium, wo wir nicht .NET-Funktion ändern können und müssen compitable Funktion in Objective-C schreiben. –
@JanakNirmal So einfach tun: 'const char * cstr = [Zeichenfolge cStringUsingEncoding: NSUTF16StringEncoding];' – NSAddict
@ JanakNirmal: Es wäre wert gewesen, zu sagen, dass zu Beginn mit. In diesem Fall müssen Sie Ihren Objective-C-Code ändern, um 'NSUTF16StringEncoding' zu verwenden. –