57 votes

Comment calculer un hachage SHA-2 (idéalement SHA 256 ou SHA 512) dans iOS ?

L'API des services de sécurité ne semble pas me permettre de calculer directement un hachage. Il existe de nombreuses versions disponibles dans le domaine public ou sous licence libre, mais je préfère utiliser une implémentation de bibliothèque système si possible.

Les données sont accessibles via des NSData, ou des pointeurs simples.

La force cryptographique du hachage est importante pour moi. SHA-256 est la taille de hachage minimale acceptable.

0voto

dcow Points 2921

J'ai nettoyé https://stackoverflow.com/a/13199111/1254812 un peu et l'a structuré comme un NSString extension

@interface NSString (SHA2HEX)

/*
 Get the SHA2 (256 bit) digest as a hex string.
 */
@property (nonatomic, readonly) NSString* sha2hex;
@end

@implementation NSString (SHA2HEX)

- (NSString*)sha2hex
{
    NSData *data = [self dataUsingEncoding:NSUTF8StringEncoding];

    if (data.length > UINT32_MAX)
        return nil;

    uint8_t digest[CC_SHA256_DIGEST_LENGTH];
    CC_SHA256(data.bytes, (CC_LONG)data.length, digest);

    const int hexlen = CC_SHA256_DIGEST_LENGTH * 2;
    NSMutableString *hexstr = [NSMutableString stringWithCapacity:hexlen];

    for (int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) {
        [hexstr appendFormat:@"%02x", digest[i]];
    }

    return hexstr;
}

@end

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X