在Objective C中将hex转换为base64?

我使用以下函数创建了字符串的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:@""]; NSLog(@"Hash : %@", hash); 

它给了我输出:8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92。 但我需要以下输出:jZae727K08KaOmKSgOaGzww / XVqGr / PKEgIMkjrcbJI =。 它是base64。

如何将生成的“hex”哈希转换为“base64”?

我曾使用这个网站生成base64哈希: http : //www.online-convert.com/result/7bd4c809756b3c16cf9d1939b1e57584

您不应该将从描述生成的NSString *hash转换为base-64。 它是hex字符串,而不是实际的数据字节。

您应该使用任何可用的base-64编码器直接从NSData *out到base-64字符串。 例如,您可以从此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]; 

我用这个,( 我在iphone-sdk上如何做base64编码? )

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

效果很好,可以轻松使用ARC。