2012-07-05 3 views
2

j'avais créé un codage SHA256 de la chaîne en utilisant la fonction suivante,Conversion d'hex en base64 en Objective C?

const char *s=[@"123456" cStringUsingEncoding:NSASCIIStringEncoding]; 
    NSData *keyData=[NSData dataWithBytes:s length:strlen(s)]; 

    uint8_t digest[CC_SHA256_DIGEST_LENGTH]={0}; 
    CC_SHA256(keyData.bytes, keyData.length, digest); 
    NSData *out=[NSData dataWithBytes:digest length:CC_SHA256_DIGEST_LENGTH]; 
    NSString *hash=[out description]; 
    hash = [hash stringByReplacingOccurrencesOfString:@" " withString:@""]; 
    hash = [hash stringByReplacingOccurrencesOfString:@"<" withString:@""]; 
    hash = [hash stringByReplacingOccurrencesOfString:@">" withString:@""]; 

    NSLog(@"Hash : %@", hash); 

Il me donne la sortie: 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92. Mais j'ai besoin de la sortie suivante: jZae727K08KaOmKSgOaGzww/XVqGr/PKEgIMkjrcbJI =. C'est base64.

Comment puis-je convertir le hachage "hex" que j'ai généré en "base64"?

je pu utiliser ce site pour générer hachage base64: http://www.online-convert.com/result/7bd4c809756b3c16cf9d1939b1e57584

+3

Cette réponse a été donnée plusieurs fois. Par exemple. http://stackoverflow.com/questions/392464/any-base64-library-on-iphone-sdk – Mundi

+1

@Mundi Mais ceux qui ne fonctionnent pas – Vaquita

Répondre

4

Vous ne devriez pas convertir les NSString *hash que vous avez généré de la description de base64. C'est une chaîne hexadécimale, pas les octets de données réels.

Vous devriez aller directement de NSData *out à la chaîne 64, en utilisant l'un des encodeurs de base 64 disponibles. Par exemple, vous pouvez télécharger une mise en œuvre de this post, et l'utiliser comme suit:

const char *s=[@"123456" cStringUsingEncoding:NSASCIIStringEncoding]; 
NSData *keyData=[NSData dataWithBytes:s length:strlen(s)]; 

uint8_t digest[CC_SHA256_DIGEST_LENGTH]={0}; 
CC_SHA256(keyData.bytes, keyData.length, digest); 
NSData *out=[NSData dataWithBytes:digest length:CC_SHA256_DIGEST_LENGTH]; 
// The method below is added in the NSData+Base64 category from the download 
NSString *base64 =[out base64EncodedString]; 
Questions connexes