2

次の関数を使用して、文字列の 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です。

生成した「hex」ハッシュを「base64」に変換するにはどうすればよいですか?

この Web サイトを使用して base64 ハッシュを生成しました: http://www.online-convert.com/result/7bd4c809756b3c16cf9d1939b1e57584

4

2 に答える 2

4

NSString *hash説明から生成した を base-64に変換しないでください。これは、実際のデータ バイトではなく、16 進文字列です。

NSData *out利用可能な base-64 エンコーダーのいずれかを使用して、base-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];
于 2012-07-05T09:35:42.210 に答える
1

私はこれを使用します ( How do I do base64 encoding on iphone-sdk? で言及)

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

うまく機能し、ARC で簡単に使用できます。

于 2012-07-05T10:42:41.163 に答える