【问题标题】:OpenSSL SHA256 equivalent in Objective-C [duplicate]Objective-C 中的 OpenSSL SHA256 等效项 [重复]
【发布时间】:2013-02-09 06:47:14
【问题描述】:

我在将命令行 OpenSSL SHA256 Digest 转换为 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]);

我得到以下结果,它明显不同于上面显示的预期 OpenSSL SHA256 等效项:

d8a0771d41c6b9918048c4842415946bcda27c75b0b6ae4948b6ea081eb01196

我尝试将编码从 NSUTF8StringEncoding 更改为 NSASCIIStringEncoding,但没有帮助。

【问题讨论】:

    标签: objective-c encryption openssl sha


    【解决方案1】:

    echo 添加一个额外的换行符。如果我们使用echo -n,我们会得到预期的输出:

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

    【讨论】:

    • 谢谢!实际上,当我将要散列的字符串传入时,我希望包含那个额外的换行符,因为我正在访问一个我无法控制的 API,并且已经期望该换行符。我在字符串中附加了一个 \n。
    • 在这种情况下,当然,您可以在计算哈希时添加换行符。我建议在调用createSHA256HashWithBytes 的函数中这样做,因为createSHA256HashWithBytes 的其他用户不会期望它添加换行符。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多