Question

Je développe la fonction d'ouverture de session pour mon application iPhone, donc je veux hachage le mot de passe en utilisant l'algorithme de hachage SHA512 alors obtenir le résultat que NSString (le résultat doit être le même avec SHA512 en C #). Après avoir passé beaucoup de temps dans l'internet, je trouve toujours pas encore compris la solution! : (

Y at-il quelqu'un a la solution et un exemple de code, s'il vous plaît aidez-moi! Merci beaucoup!

[Mise à jour] Dans mon code C #, le mot de passe est enregistré à l'aide SecureString, alors peut-être sa cause marque tableau différent d'octets entre Objective-C et C #

Était-ce utile?

La solution

Cette fonction de hachage d'une chaîne à l'aide SHA512. La chaîne résultante est une représentation hexadécimale du hachage:

+ (NSString *) createSHA512:(NSString *)source {

    const char *s = [source cStringUsingEncoding:NSASCIIStringEncoding];

    NSData *keyData = [NSData dataWithBytes:s length:strlen(s)];

    uint8_t digest[CC_SHA512_DIGEST_LENGTH] = {0};

    CC_SHA512(keyData.bytes, keyData.length, digest);

    NSData *out = [NSData dataWithBytes:digest length:CC_SHA512_DIGEST_LENGTH];

    return [out description];
}

Ne pas oublier d'inclure l'en-tête:

#include <CommonCrypto/CommonDigest.h>

Autres conseils

J'utilise celui-ci.

Il correspond à PHP SHA512 algorithme de sortie:

<?php `hash('sha512', 'The quick brown fox jumped over the lazy dog.');` ?>


code Objective-C:

+(NSString *)createSHA512:(NSString *)string
{
    const char *cstr = [string cStringUsingEncoding:NSUTF8StringEncoding];
    NSData *data = [NSData dataWithBytes:cstr length:string.length];
    uint8_t digest[CC_SHA512_DIGEST_LENGTH];
    CC_SHA512(data.bytes, data.length, digest);
    NSMutableString* output = [NSMutableString  stringWithCapacity:CC_SHA512_DIGEST_LENGTH * 2];

    for(int i = 0; i < CC_SHA512_DIGEST_LENGTH; i++)
        [output appendFormat:@"%02x", digest[i]];
    return output;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top