十六进制转换为Base64的目标C?(Converting hex to base64 in Obj

2019-09-19 03:10发布

我创建了使用下面的函数的字符串的SHA256编码,

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

Answer 1:

你不应该转换NSString *hash你从描述生成与base-64。 这是一个十六进制字符串,而不是实际的数据字节。

您应该直行NSData *out基地-64串,使用任何可用的基于64位的编码器。 例如,你可以下载一个实现这个职位 ,并使用它,如下所示:

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];


Answer 2:

我用这个,(在mentionned 我怎么做iphone-SDK base64编码? )

http://www.imthi.com/blog/programming/iphone-sdk-base64-encode-decode.php

运作良好,并与ARC易于使用。



文章来源: Converting hex to base64 in Objective C?