【问题标题】:Gravatar for Iphone? How do I generate a hexadecimal MD5 hash?用于 Iphone 的 Gravatar?如何生成十六进制 MD5 哈希?
【发布时间】:2009-05-08 15:26:44
【问题描述】:

我想在我的 iPhone 应用程序中使用 gravatar。无论如何在 iPhone 的 Objective-C 中生成十六进制 MD5 哈希?在 iPhone 上使用 openssl 是不行的。

【问题讨论】:

    标签: iphone objective-c hash md5


    【解决方案1】:

    这是我在将其从应用中删除之前的做法:

    #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];
    }
    

    公平地说,这不是我自己写的。我在互联网的某个地方找到了它,但我没有记录在哪里。

    【讨论】:

      【解决方案2】:

      我用于生成必要 MD5 哈希的代码位于 CommonCrypto 子文件夹中的 my github repository 上。那里有一堆类似的例程,它们将向您展示如何使用 CommonCrypto 或如何格式化十六进制字节值、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 调用 - 还不如生成小写的十六进制值开始与。

      【讨论】:

        猜你喜欢
        • 2011-10-25
        • 2014-07-24
        • 2011-02-19
        • 1970-01-01
        • 2015-03-24
        • 2023-04-03
        • 1970-01-01
        • 2011-03-02
        • 1970-01-01
        相关资源
        最近更新 更多