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;
}
答案 0 :(得分:2)
NSInteger length = sizeof(bin);
将给出无符号字符指针的大小 - 32位设备上的4个字节和64位上的8个字节。
你想要的是
NSInteger length = data.length
因为它将为您提供要散列的字节数