将C#转换为Objective-C - MD5和64位字符串

时间:2011-10-31 17:19:23

标签: c# objective-c hash md5

我需要将其翻译成Objective-C,有人可以帮忙吗?

var randomString = "abc";
var computedHash = Convert.ToBase64String(new MD5CryptoServiceProvider().ComputeHash(Encoding.Default.GetBytes(computedValue)));

首先发生了什么?

我以为是:

  1. 从randomString
  2. 获取字节数据
  3. MD5
  4. 将结果转换为数据
  5. 将该数据转换为基本64字符串。
  6. 这是我到目前为止所得到的:

    NSString    * completeString    = @"abc";
    NSData      * bytes             = [completeString dataUsingEncoding:NSUTF8StringEncoding];
    NSString    * md5ed             = [bytes md5];
    NSData      * data               = [md5ed dataUsingEncoding:NSUnicodeStringEncoding];
    NSString    * base64            = [NSString base64StringFromData:data length:[data length]];
    

    我正在使用一个类别来生成MD5哈希。

    @implementation NSData (Crypto)
    
    -(NSString*)md5{
        const char *cStr = [self bytes];
        unsigned char digest[CC_MD5_DIGEST_LENGTH];
        CC_MD5( cStr, [self length], digest );
        NSString* s = [NSString stringWithFormat: @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
                       digest[0], digest[1], 
                       digest[2], digest[3],
                       digest[4], digest[5],
                       digest[6], digest[7],
                       digest[8], digest[9],
                       digest[10], digest[11],
                       digest[12], digest[13],
                       digest[14], digest[15]];
        return s;
    
    }
    
    @end
    

1 个答案:

答案 0 :(得分:1)

我对Objective C一无所知,但Encoding.Default.GetBytes()返回使用UTF-16编码的字符串。从名称来看,似乎NSUTF8StringEncoding使用UTF-8。

因此,要获得与C#相同的结果,您需要将字符串编码为UTF-16。