如何在NSString中使用SHA1哈希捕获NSData?

时间:2011-01-29 13:56:15

标签: objective-c nsstring nsdata sha1 cryptography

我在从字符串计算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时,我可以清楚地看到一个结果出现 - 这似乎是正确的。这应该表明第四行出了问题。但是什么?非常感谢任何帮助。

亲切的问候,

雷因德

1 个答案:

答案 0 :(得分:3)

SHA-1是一个20字节的二进制块,而不是有效的UTF-8字符串。这就是NSString的initWithData:encoding:失败的原因。通常用于表示散列和的是HEX字符串。基本上,您需要的是[hashedData description]