2

コマンドラインのOpenSSLSHA256ダイジェストをObjective-Cの同等のものに変換するのに問題があります。どんな援助でも大歓迎です。

次のようにコマンドラインでOpenSSLを実行すると、次のようになります。

    echo 'key=2fvmer3qbk7f9jnqneg58bu2&secret=qvxkmw57pec7&ts=1200603038' | openssl dgst -sha256

(正しい/期待される)結果が得られます:

1e673d58756f95fb938ddb42fd6242dc691803578a3503fedd5c0e92aac6c098

次に、Objective-Cで次のように関数を作成しました-

SHA256HashClass.h

@interface SHA256Hashclass : NSObject{
    unsigned char SHAInputValue[32];
}

SHA256Hashclass.m

- (id)createSHA256HashWithBytes:(const void *)bytes length:(NSUInteger)length
{
    // hash
    CC_SHA256(bytes, length, SHAInputValue);

    NSInteger byteLength = sizeof(char value[CC_SHA256_DIGEST_LENGTH]); //sizeof() = 32 bytes

    NSMutableString *stringValue = [NSMutableString stringWithCapacity:byteLength * 2];

    // convert to string
    for (int i = 0; i < byteLength; i++)
    {
        [stringValue appendFormat:@"%02x", SHAInputValue[i]];
    }

    return stringValue;
}

ただし、上記の関数を次のように呼び出すと、次のようになります。

NSData *dataIn = [@"key=2fvmer3qbk7f9jnqneg58bu2&secret=qvxkmw57pec7&ts=1200603038" dataUsingEncoding:NSUTF8StringEncoding];

SHA256Hashclass *hashClass = [[SHA256Hashclass alloc] init];

NSLog(@"Result: %@", [hashClass createSHA256HashWithBytes:dataIn.bytes length:dataIn.length]);

上記のOpenSSLSHA256と同等の予想とは明らかに異なる次の結果が得られます。

d8a0771d41c6b9918048c4842415946bcda27c75b0b6ae4948b6ea081eb01196

NSUTF8StringEncodingエンコーディングをからに変更しようとしましNSASCIIStringEncodingたが、役に立ちませんでした。

4

1 に答える 1

2

echo改行を追加します。を使用echo -nすると、期待される出力が得られます。

$ echo -n 'key=2fvmer3qbk7f9jnqneg58bu2&secret=qvxkmw57pec7&ts=1200603038' | openssl dgst -sha256
(stdin)= d8a0771d41c6b9918048c4842415946bcda27c75b0b6ae4948b6ea081eb01196
于 2013-02-23T19:39:32.980 に答える