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.

80voto

alex-i Points 3089

C'est ce que j'utilise pour SHA1 :

#import <CommonCrypto/CommonDigest.h>

+ (NSData *)sha1:(NSData *)data {
    unsigned char hash[CC_SHA1_DIGEST_LENGTH];
    if ( CC_SHA1([data bytes], [data length], hash) ) {
        NSData *sha1 = [NSData dataWithBytes:hash length:CC_SHA1_DIGEST_LENGTH];        
        return sha1;
    }
return nil;
}

Remplacer CC_SHA1 avec CC_SHA256 (ou celui dont vous avez besoin), ainsi que les éléments suivants CC_SHA1_DIGEST_LENGTH avec CC_SHA256_DIGEST_LENGTH .

33voto

Ege Akpinar Points 1352

En voici une assez similaire basée sur NSString

+ (NSString *)hashed_string:(NSString *)input
{
    const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding];
    NSData *data = [NSData dataWithBytes:cstr length:input.length];
    uint8_t digest[CC_SHA256_DIGEST_LENGTH];

    // This is an iOS5-specific method.
    // It takes in the data, how much data, and then output format, which in this case is an int array.
    CC_SHA256(data.bytes, data.length, digest);

    NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2];

    // Parse through the CC_SHA256 results (stored inside of digest[]).
    for(int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) {
        [output appendFormat:@"%02x", digest[i]];
    }

    return output;
}

(Les crédits vont à http://www.raywenderlich.com/6475/basic-security-in-ios-5-tutorial-part-1 )

3voto

mdkr Points 227

Voici ce qui a fonctionné pour moi

func sha256(securityString : String) -> String {
    let data = securityString.dataUsingEncoding(NSUTF8StringEncoding)!
    var hash = [UInt8](count: Int(CC_SHA256_DIGEST_LENGTH), repeatedValue: 0)
    CC_SHA256(data.bytes, CC_LONG(data.length), &hash)
    let output = NSMutableString(capacity: Int(CC_SHA1_DIGEST_LENGTH))
    for byte in hash {
        output.appendFormat("%02x", byte)
    }
    return output as String
}

0voto

Sunil aruru Points 247

J'ai utilisé le lien ci-dessous pour créer la valeur de hachage d'un document. Il est très simple et facile de calculer la valeur de hachage, surtout pour les gros fichiers.

Lien : http://www.joel.lopes-da-silva.com/2010/09/07/compute-md5-or-sha-hash-of-large-file-efficiently-on-ios-and-mac-os-x/comment-page-1/#comment-18533

0voto

Boris Points 6481
+ (NSData *)sha256DataFromData:(NSData *)data {
    unsigned char result[CC_SHA256_DIGEST_LENGTH];
    CC_SHA256([data bytes], (int)[data length], result);
    return [NSData dataWithBytes:result length:CC_SHA256_DIGEST_LENGTH];
}

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