Android или iOS, SHA-1 имеет ожидаемую длину 20 байт.
Но есть разница в возвращении алгоритма sha-1.
iOS просто не завершает результат нулевым символом.
Так что я думаю, что смысл не в том, чтобы использовать длину вывода sha для генерации выходных данных, а в константе CC_SHA1_DIGEST_LENGTH - которая равна 20.
uint8_t digest[CC_SHA1_DIGEST_LENGTH];
NSData* data = [stringToHash dataUsingEncoding:NSUTF8StringEncoding];
char* sha = CC_SHA1(data.bytes, data.length, digest);
NSData *hashedData = [NSData dataWithBytes:sha length:CC_SHA1_DIGEST_LENGTH];
Если вы сами завершите дайджест, то вывод ша будет правильным:
uint8_t digest[CC_SHA1_DIGEST_LENGTH+1];
memset(digest,0,CC_SHA1_DIGEST_LENGTH+1);
NSData* data = [stringToHash dataUsingEncoding:NSUTF8StringEncoding];
char* sha = CC_SHA1(data.bytes, data.length, digest);
NSData *hashedData = [NSData dataWithBytes:sha length:strlen(sha)];
Надеюсь, это поможет, ура :) 1013 *