sos の 作業メモ

プログラミングや英会話学習、マイルや旅行、日常生活など。最近はWebFormなASP.NETのお守りがお仕事です。

日々の生活にhappyをプラスする|ハピタス Gポイント

MD5とかSHA-1とかで文字列のダイジェストを計算してみる

NSStringの文字列からダイジェストを計算とか普通によくやる処理だけど、別に難しくもなんともなくて、CommonDigest.hの中のメソッドを呼ぶだけ。

#import <CommonCrypto/CommonCrypto.h>

u_char digest[CC_MD5_DIGEST_LENGTH];

const char* srcbytes = [@"ソース" UTF8String];
CC_MD5(srcbytes, strlen(srcbytes), digest);

これはMD5でやってるけど、SHA-1なら 結果の配列の長さをCC_SHA1_DIGEST_LENGTHにして、CC_SHA1を呼ぶだけ。libcommonCrypto.dylibとかリンクしないと動かないのかなと心配したけど、普通に動いてる。

あと、巨大なバイト列を分割して処理する場合は、

CC_MD5_CTX ctx;

CC_MD5_Init(&ctx);
CC_MD5_Update(&ctx,srcbytes,strlen(srcbytes));
CC_MD5_Final(digest, &ctx);

って感じで Updateを複数回呼んでやればOK。Androidだとjava.security.MessageDigestのgetInstanceでアルゴリズムを動的に変えられるのだけど、iOSのはそうではない分、ちょっとシンプルです。