ホーム > タグ > カテゴリ

カテゴリ

NSDataのMD5メッセージダイジェストを計算する

NSDataクラスにMD5メッセージダイジェストを計算するメソッドを追加してみました。

NSData+Digest.h

#import 
 
@interface NSData (Digest)
 
- (NSString *)MD5DigestString;
 
@end

NSData+Digest.m

#import "NSData+Digest.h"
#import "CommonCrypto/CommonDigest.h"
 
@implementation NSData (Digest)
 
- (NSString *)MD5DigestString
{
  unsigned char digest[CC_MD5_DIGEST_LENGTH];
 
  CC_MD5([self bytes], [self length], digest);
 
  char md5cstring[CC_MD5_DIGEST_LENGTH*2];
 
  for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
    sprintf(md5cstring+i*2, "%02x", digest[i]);
  }
 
  return [NSString stringWithCString:md5string length:CC_MD5_DIGEST_LENGTH*2];
}
 
@end

参考:iPhone で MD5 ハッシュ値を取得には? - 1/4dot Blog

ちなみに、最初はメソッド名を MD5Digest としていたのですが、NSDataを拡張している別のカテゴリに同名のメソッド(NSConcreteDataという非公開クラスのインスタンスとしてMD5メッセージダイジェストを返してきます)が存在するようで、そのせいで少々はまりました…。

同名のメソッドが複数のカテゴリで定義されていた場合、どのカテゴリの定義が有効になるかは保証されていません。

(「詳解 Objective-C 2.0」より)

プライベートメソッドでなく公開メソッドにしておいてくれればよかったのになー、と思ったことは言うまでもありません。

関連する投稿

Home > Tags > カテゴリ

Search
Feeds
Meta

Return to page top