NSString MD5与散列

您好,必须通过networking服务发送用户名和密码进行login。 问题是服务器想要一个奇怪的MD5格式的密码,我不能生成它。

NSString password = @"."; NSString md5 = @"5058f1af8388633f609cadb75a75dc9d"; 

服务器MD5是“PX?C?` – ZuÜ”

我需要改变“PX?C?` – ZuÜ”中的5058f1af8388633f609cadb75a75dc9d ,但我没有任何想法。

编辑

我发现结果是5058f1af8388633f609cadb75a75dc9dstring的散列。 是服务器上的.NET代码:

 byte[] passwordBytesEnc = UTF8Encoding.Default.GetBytes("."); byte[] passwordBytesHash = MD5.Create().ComputeHash(passwordBytesEnc); string passwordCriptata = UTF8Encoding.Default.GetString(passwordBytesHash); 

尝试这个..

 - (NSString *)MD5String:(NSString *)string{ const char *cstr = [string UTF8String]; NSLog(@"%s",cstr); unsigned char result[16]; CC_MD5(cstr, strlen(cstr), result); NSLog(@"%s",result); return [NSString stringWithFormat: @"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7], result[8], result[9], result[10], result[11], result[12], result[13], result[14], result[15] ]; } 

并像这样打电话

 NSString *md5 = @"5058f1af8388633f609cadb75a75dc9d"; [self MD5String:md5]; 

那么,你的服务器期望的是MD5-Hex值的string表示(无论什么原因…)。

你可以将你的hex值转换为一个string,如下所示:

 NSString *string = @"5058f1af8388633f609cadb75a75dc9d"; NSMutableString * newString = [[NSMutableString alloc] init]; //will contain your result-string int i = 0; while (i < [string length]) { NSString * hexChar = [string substringWithRange: NSMakeRange(i, 2)]; int value = 0; sscanf([hexChar cStringUsingEncoding:NSASCIIStringEncoding], "%x", &value); [newString appendFormat:@"%c", (char)value]; i+=2; } 

( – > 如何将HEX转换为Objective-C中的NSString? )