NSString *string = @"admin";
const char *cStr=[string cStringUsingEncoding:NSUTF16StringEncoding];
unsigned char result[32];
CC_MD5(cStr, strlen(cStr), result);
使用NSUTF8StringEncoding md5后是21232f297a57a5a743894a0e4a801fc3
NSUTF16StringEncoding 是0cc175b9c0f1b6a831c399e269772661
但是我们有个接口后台admin加密是19a2854144b63a8f7617a6f225019b12
我想问下各位大哥这个是用那个编码加密后是19a2854144b63a8f7617a6f225019b12
其实用NSUnicodeStringEncoding或者NSUTF16StringEncoding也是可以的(实际上objective-c里NSUTF16StringEncoding = NSUnicodeStringEncoding)...
但是似乎上述两种编码转换出来的char *会有'\0'结束符,所以导致用strlen()计算长度就会不对,改成下面这样计算长度,也是可以得到19A2854144B63A8F7617A6F225019B12的加密结果的:
+ (NSString *) md5:(NSString *)str { const char *cStr = [str cStringUsingEncoding:NSUTF16StringEncoding]; unsigned char result[CC_MD5_DIGEST_LENGTH]; CC_MD5( cStr, [str length] * 2, 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] ]; }一般不会直接拿源字符串MD5加密的,大部分情况都会加盐
就想问下admin怎么使用md5可以得到19a2854144b63a8f7617a6f225019b12哦?
引用来自“小纯洁”的答案
admin的编码我试了utf-8或者utf-16后md5是不一样的,但是就是没有一个跟后台接口的一样,后台又改变不了的
确实是编码问题,估计后台那边用的是Unicode。
你可以试试这个:
+ (NSString *) md5:(NSString *)str { NSData *utf16data = [str dataUsingEncoding:NSUTF16LittleEndianStringEncoding]; unsigned char result[CC_MD5_DIGEST_LENGTH]; CC_MD5([utf16data bytes], [utf16data length], 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] ]; }Log:
[Line 33] admin - 19A2854144B63A8F7617A6F225019B12
引用来自“妖魔舞”的答案
引用来自“布鲁诗文”的答案
确实是编码问题,估计后台那边用的是Unicode。
你可以试试这个:
+ (NSString *) md5:(NSString *)str { NSData *utf16data = [str dataUsingEncoding:NSUTF16LittleEndianStringEncoding]; unsigned char result[CC_MD5_DIGEST_LENGTH]; CC_MD5([utf16data bytes], [utf16data length], 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] ]; }Log:
[Line 33] admin - 19A2854144B63A8F7617A6F225019B12