苹果的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;
}
NSInteger length = sizeof(bin);
将为您提供无符号char指针的大小-在32位设备上为4个字节,在64位设备上为8个字节。
你想要的是
NSInteger length = data.length
因为这将为您提供要散列的字节数
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句