Хэш-алгоритм SHA256 дает разные результаты в iOS с использованием Common Crypto и OpenSSL
Отличаются ли хэш-функции в Apple Common Crypto и OpenSSL? Я пытаюсь сгенерировать 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 ответ
Решение
NSInteger length = sizeof(bin);
Даст вам размер беззнакового указателя на символ - 4 байта на 32-битном устройстве и 8 на 64-битном.
Что вы хотите
NSInteger length = data.length
так как это даст вам количество байтов для хеширования