Objective-C中的OpenSSL SHA256等效项

Objective-C中的OpenSSL SHA256等效项,objective-c,encryption,openssl,sha,Objective C,Encryption,Openssl,Sha,我在将命令行OpenSSL SHA256摘要转换为Objective-C中的等效内容时遇到了一些问题。如果您能提供任何帮助,我将不胜感激 当我在命令行上运行OpenSSL时,如下所示: echo 'key=2fvmer3qbk7f9jnqneg58bu2&secret=qvxkmw57pec7&ts=1200603038' | openssl dgst -sha256 我得到了(正确的/预期的)结果: 然后我在Objective-C中创建了一个函数,如下所示- SHA2

我在将命令行OpenSSL SHA256摘要转换为Objective-C中的等效内容时遇到了一些问题。如果您能提供任何帮助,我将不胜感激

当我在命令行上运行OpenSSL时,如下所示:

    echo 'key=2fvmer3qbk7f9jnqneg58bu2&secret=qvxkmw57pec7&ts=1200603038' | openssl dgst -sha256
我得到了(正确的/预期的)结果:

然后我在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;
}
我得到的以下结果与上面所示的预期OpenSSL SHA256等效结果明显不同:

d8a0771d41c6b9918048c4842415946bcda27c75b0b6ae4948b6ea081eb01196

我已尝试将编码从
NSUTF8StringEncoding
更改为
nsasitringencoding
,但没有效果。

echo
添加了一个额外的换行符。如果我们使用echo-n

$ echo -n 'key=2fvmer3qbk7f9jnqneg58bu2&secret=qvxkmw57pec7&ts=1200603038' | openssl dgst -sha256
(stdin)= d8a0771d41c6b9918048c4842415946bcda27c75b0b6ae4948b6ea081eb01196

非常感谢。实际上,我希望在传入字符串进行散列时包含额外的换行符,因为我正在访问一个我无法控制的API,并且已经期望使用该换行符。我已经在字符串中添加了一个\n。当然,在这种情况下,您可以在计算哈希时添加换行符。我建议在调用
createSHA256HashWithBytes
的函数中这样做,因为
createSHA256HashWithBytes
的其他用户不希望它添加换行符。
d8a0771d41c6b9918048c4842415946bcda27c75b0b6ae4948b6ea081eb01196
$ echo -n 'key=2fvmer3qbk7f9jnqneg58bu2&secret=qvxkmw57pec7&ts=1200603038' | openssl dgst -sha256
(stdin)= d8a0771d41c6b9918048c4842415946bcda27c75b0b6ae4948b6ea081eb01196