我在从字符串计算SHA1哈希然后将其放回另一个字符串时遇到问题。这是我的所作所为:
unsigned char hashedChars[20];
CC_SHA1([hashElements UTF8String], [hashElements lengthOfBytesUsingEncoding:NSUTF8StringEncoding], hashedChars);
NSData *hashedData = [NSData dataWithBytes:hashedChars length:20];
NSString *hash = [[NSString alloc] initWithData:hashedData encoding:NSUTF8StringEncoding];
NSLog(@"%s", hash);
日志的结果是(null)。我基本上通过组合几个字符串来创建一个字符串,然后尝试计算哈希值,该哈希值存储在NSData对象中,然后检索并放回哈希字符串中。当我记录hashedData时,我可以清楚地看到一个结果出现 - 这似乎是正确的。这应该表明第四行出了问题。但是什么?非常感谢任何帮助。
亲切的问候,
雷因德
答案 0 :(得分:3)
SHA-1是一个20字节的二进制块,而不是有效的UTF-8字符串。这就是NSString的initWithData:encoding:
失败的原因。通常用于表示散列和的是HEX字符串。基本上,您需要的是[hashedData description]
。