2012-07-05 2 views
2

я создал SHA256 кодировку строки, используя следующую функцию,Преобразование hex в base64 в 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); 

Это дает мне выход: 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92. Но мне нужен следующий вывод: jZae727K08KaOmKSgOaGzww/XVqGr/PKEgIMkjrcbJI =. Это base64.

Как я могу преобразовать хэш-шестнадцатеричный, который я сгенерировал для «base64»?

Я был использовать этот сайт, чтобы сгенерировать base64 хеш: http://www.online-convert.com/result/7bd4c809756b3c16cf9d1939b1e57584

+3

Этот ответ был дан много раз. Например. http://stackoverflow.com/questions/392464/any-base64-library-on-iphone-sdk – Mundi

+1

@Mundi Но это не работает – Vaquita

ответ

4

Вы не должны быть преобразования NSString *hash, что созданный вами из описания в base64. Это шестнадцатеричная строка, а не фактические байты данных.

Вы должны перейти прямо от NSData *out к строке base-64, используя любой из доступных кодеров base-64. Например, вы можете загрузить реализацию из this post, и использовать его следующим образом:

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]; 
Смежные вопросы