当我使用此代码在我的iPhone应用程序中生成hash256时:
unsigned char hashedChars[32];
NSString *inputString;
inputString = [NSString stringWithFormat:@"hello"];
CC_SHA256([inputString UTF8String],
[inputString lengthOfBytesUsingEncoding:NSASCIIStringEncoding ],
hashedChars);
NSData * hashedData = [NSData dataWithBytes:hashedChars length:32];
inputString的hash256是正确创建的,但是如果我使用这样的字符串@“\ x00 \ x25 \ x53 \ b4”,则hash256与带有“\ x”字符的真实字符串不同。 我认为问题在于编码“UTF8”而不是ascii。 谢谢!
答案 0 :(得分:1)
我会怀疑第一个字符“\ x00” - 这会终止任何认为它处理“常规C字符串”的东西。
不确定lengthOfBytesUsingEncoding:是否将这些内容考虑在内,但是我会尝试使用它。
答案 1 :(得分:1)
您获得的字节数为[inputString UTF8String]
,但长度为[inputString lengthOfBytesUsingEncoding:NSASCIIStringEncoding]
。这显然是错误的。此外(假设您的意思是“\ xB4”并且它变成不是ASCII的东西),“\ xB4”不太可能是ASCII。 NSString的文档说
如果指定的编码不能用于转换接收器
,则返回0
所以你要计算空字符串的哈希值。当然这是错误的。
如果您只生成一次数据,则不太可能遇到问题:
NSData * inputData = [inputString dataUsingEncoding:NSUTF8StringEncoding];
CC_SHA256(inputData.bytes, inputData.length, hashedChars);