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

Android开发

苹果的Common Crypto和OpenSSL中的哈希函数是否有所不同?我正在尝试使用以下两种方法生成相同字符串的SHA256,并且两者都会产生不同的结果。我有什么不同吗?我给人的印象是SHA256算法在各个平台之间是通用的,并且在iOS,Android,Windows等系统中产生相同的结果。

注意:当我使用MessageDigest.getInstance(“ SHA-256”)在Android中尝试相同的操作时,得到的结果与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;
}
保尔11
NSInteger length = sizeof(bin);

将为您提供无符号char指针的大小-在32位设备上为4个字节,在64位设备上为8个字节。

你想要的是

NSInteger length = data.length

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章