59

セキュリティ サービス API では、ハッシュを直接計算できないようです。利用可能なパブリック ドメイン バージョンやリベラル ライセンス バージョンはたくさんありますが、可能であればシステム ライブラリの実装を使用したいと思います。

データには、NSData またはプレーン ポインターを介してアクセスできます。

ハッシュの暗号強度は私にとって重要です。SHA-256 は、最小許容ハッシュ サイズです。

4

6 に答える 6

81

これは私が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_SHA256CC_SHA1_DIGEST_LENGTHCC_SHA256_DIGEST_LENGTH

于 2011-06-03T14:28:57.983 に答える
35

これは 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に移動します)

于 2012-11-02T16:15:31.170 に答える