Objective-C中的OpenSSL SHA256等效项
我在将命令行OpenSSL SHA256摘要转换为Objective-C中的等效内容时遇到了一些问题。如果您能提供任何帮助,我将不胜感激 当我在命令行上运行OpenSSL时,如下所示: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
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