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のはそうではない分、ちょっとシンプルです。