CC_SHA1之后的NSData到NSString

Bar*_*obs 3 hash cocoa-touch

基于此问题,我写了一个类NSStringhash NSString使用SHA1实例.但是,我的实施有问题.有趣的是,记录NSData实例确实给出了预期的哈希,但是当我想从该NSData实例创建一个NSString时,我只是得到了null.

- (NSString *)sha1 {
    NSData *dataFromString = [self dataUsingEncoding:NSUTF8StringEncoding];
    unsigned char hashed[CC_SHA1_DIGEST_LENGTH];

    if ( CC_SHA1([dataFromString bytes], [dataFromString length], hashed) ) {
        NSData *dataFromDigest = [NSData dataWithBytes:hashed length:CC_SHA1_DIGEST_LENGTH];

        NSString *result = [[NSString alloc] initWithBytes:[dataFromDigest bytes] length:[dataFromDigest length] encoding:NSUTF8StringEncoding];

        return result;

    } else {

        return nil;
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助!

Ben*_*tto 5

散列函数的输出只是一堆字节.您正在使用这些字节,并且基本上告诉NSString它们代表UTF8编码的字符串,而它们不是.生成的NSString只是垃圾.

听起来你真正想要的是一个代表哈希值的十六进制数字串?如果是这样,我相信你需要自己滚动它,一次循环dataFromDigest一个字节,并根据字节的值输出新的NSMutableString正确的十六进制数字.您可以自己动手或使用网络上的一些代码.对这篇文章的评论看起来很有希望.