SHA256哈希算法在iOS中使用Common Crypto和OpenSSL产生不同的结果

时间:2016-08-09 09:37:15

标签: android ios hash sha256 commoncrypto

Apple的Common Crypto和OpenSSL中的Hash功能是否不同?我正在尝试使用以下两种方法生成相同字符串的SHA256,并且两者都产生不同的结果。我做了什么不同的事情吗?我的印象是SHA256算法在各种平台上都很常见,并且在iOS,Android,Windows等中产生相同的结果。

注意:当我在Android中使用MessageDigest.getInstance(“SHA-256”)尝试相同的操作时,我获得了与CommonCrypto Hash结果相同的结果,但OpenSSL结果不同。

// Apple Common Crypto - SHA256
- (NSData *)sha256:(NSData *)data {
    unsigned char hashResult[CC_SHA256_DIGEST_LENGTH];
    if ( CC_SHA256([data bytes], (unsigned int)[data length], hashResult) ) {
        NSData *sha256 = [NSData dataWithBytes:hashResult length:CC_SHA256_DIGEST_LENGTH];
        return sha256;
    }   
}

// SRP OpenSSL - SHA256
- (NSData *)sha256_2:(NSData *)data {
    unsigned char hashResult[SHA256_DIGEST_LENGTH];
    unsigned char *bin = (unsigned char *) [data bytes];
    NSInteger length = sizeof(bin);
    [_srpAuth hashWrapper:SRP_SHA256 input:bin size:length output:hashResult];
    NSData *sha256 = [NSData dataWithBytes:hashResult length:SHA256_DIGEST_LENGTH];
    return sha256;
}

1 个答案:

答案 0 :(得分:2)

NSInteger length = sizeof(bin);

将给出无符号字符指针的大小 - 32位设备上的4个字节和64位上的8个字节。

你想要的是

NSInteger length = data.length

因为它将为您提供要散列的字节数