如何在iOS中计算SHA-2(理想情况为SHA 256或SHA 512)哈希?

时间:2011-06-03 14:02:53

标签: objective-c ios security hash sha256

安全服务API似乎不允许我直接计算哈希。有很多公共领域和自由许可版本可用,但如果可能的话,我宁愿使用系统库实现。

可以通过NSData或普通指针访问数据。

哈希的加密强度对我很重要。 SHA-256是可接受的最小散列大小。

6 个答案:

答案 0 :(得分:79)

这就是我用于SHA1的内容:

#import <CommonCrypto/CommonDigest.h>

+ (NSData *)sha1:(NSData *)data {
    unsigned char hash[CC_SHA1_DIGEST_LENGTH];
    if ( CC_SHA1([data bytes], [data length], hash) ) {
        NSData *sha1 = [NSData dataWithBytes:hash length:CC_SHA1_DIGEST_LENGTH];        
        return sha1;
    }
return nil;
}

CC_SHA1替换为CC_SHA256(或根据您的需要),将CC_SHA1_DIGEST_LENGTH替换为CC_SHA256_DIGEST_LENGTH

答案 1 :(得分:32)

这是一个非常类似的基于NSString的文件

+ (NSString *)hashed_string:(NSString *)input
{
    const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding];
    NSData *data = [NSData dataWithBytes:cstr length:input.length];
    uint8_t digest[CC_SHA256_DIGEST_LENGTH];

    // This is an iOS5-specific method.
    // It takes in the data, how much data, and then output format, which in this case is an int array.
    CC_SHA256(data.bytes, data.length, digest);

    NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2];

    // Parse through the CC_SHA256 results (stored inside of digest[]).
    for(int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) {
        [output appendFormat:@"%02x", digest[i]];
    }

    return output;
}

(积分转到http://www.raywenderlich.com/6475/basic-security-in-ios-5-tutorial-part-1

答案 2 :(得分:3)

这对我有用

func sha256(securityString : String) -> String {
    let data = securityString.dataUsingEncoding(NSUTF8StringEncoding)!
    var hash = [UInt8](count: Int(CC_SHA256_DIGEST_LENGTH), repeatedValue: 0)
    CC_SHA256(data.bytes, CC_LONG(data.length), &hash)
    let output = NSMutableString(capacity: Int(CC_SHA1_DIGEST_LENGTH))
    for byte in hash {
        output.appendFormat("%02x", byte)
    }
    return output as String
}

答案 3 :(得分:0)

下面我用来创建文档哈希值的链接,它非常简单,易于计算专门用于大文件的哈希值。

链接:http://www.joel.lopes-da-silva.com/2010/09/07/compute-md5-or-sha-hash-of-large-file-efficiently-on-ios-and-mac-os-x/comment-page-1/#comment-18533

答案 4 :(得分:0)

x

答案 5 :(得分:0)

我稍微清理了https://stackoverflow.com/a/13199111/1254812并将其结构化为insert into test_table values (1, 100); 扩展名

NSString