1

iPhone アプリケーションでgravatarを使用したいと考えています。Objective-C for iPhone で 16 進数の MD5 ハッシュを生成する方法はありますか? iPhone で openssl を使用することはできません。

4

2 に答える 2

5

これは、アプリから削除する前に行った方法です。

#import <CommonCrypto/CommonDigest.h>

NSString* md5( NSString *str ) {
  const char *cStr = [str UTF8String];
  unsigned char result[CC_MD5_DIGEST_LENGTH];

  CC_MD5( cStr, strlen(cStr), result );

  return [[NSString
      stringWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
      result[0], result[1],
      result[2], result[3],
      result[4], result[5],
      result[6], result[7],
      result[8], result[9],
      result[10], result[11],
      result[12], result[13],
      result[14], result[15]
      ] lowercaseString];
}

これは私が自分で書いたものではないことを付け加えておきます。インターネットのどこかで見つけましたが、どこに記録していませんでした。

于 2009-05-08T15:35:28.317 に答える
4

必要な MD5 ハッシュを生成するために使用したコードは、私の github リポジトリの CommonCrypto サブフォルダーにあります。そこには、CommonCrypto の使用方法や、16 進バイト値、base-64 などの文字列をフォーマットする方法を示す、同様のルーチンがたくさんあります。

文字列を生成するより良い方法は次のとおりです。

NSMutableString * str = [[NSMutableString alloc] initWithCapacity: 33];
int i;
for ( i = 0; i < 16; i++ )
{
  [str appendFormat: @"%02x", result[i]];
}
NSString * output = [str copy];
[str release];
return ( [output autorelease] );

ただし、上記の回答のコードを使用する場合は、%02X を %02x に変更し、-lowercaseString 呼び出しを完全に放棄することを個人的にお勧めします。

于 2009-05-08T23:59:25.187 に答える