0

以下は、基本クラスとしてiOS5で問題なく動作しましたが、iOS6では失敗します(SIGABRT)。それはOSのものなのか、それともアーキテクチャーなものなのか?

また、付随するMD5ハッシュが機能することにも注意してください。

-(NSString *)SHA1Hash {
    const char *cStr = [self UTF8String];
    unsigned char digest[16];
    CC_SHA1( cStr, strlen(cStr), digest ); // This is the sha1 call

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

    for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
        [output appendFormat:@"%02x", digest[i]];

    return output;
}

助けてくれてありがとう!

4

2 に答える 2

2

iOS 5ではおそらく「幸運」になっているでしょう。SHA-1ダイジェストは16バイトではなく、20バイトです。

unsigned char digest[16];
于 2012-09-25T05:59:11.693 に答える
2

マクロCC_SHA1_DIGEST_LENGTHを使用して、ダイジェストの長さを宣言します。16が短すぎるため、スタックを破棄しています。

unsigned char digest[CC_SHA1_DIGEST_LENGTH];

のマニュアルページからCC_SHA1

CC_SHA1()は、データのlenバイトのSHA-1メッセージダイジェストを計算し、それをmdに配置します(CC_SHA1_DIGEST_LENGTH == 20バイトの出力用のスペースが必要です)。mdポインタを返します。

于 2012-09-25T06:08:33.760 に答える