2011-10-31 47 views
0

我需要将其转换为Objective-C,任何人都可以帮忙吗?将C#转换为Objective-C-MD5和base 64字符串

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

这是怎么回事?

我以为是:

  1. 从randomString
  2. MD5得到字节数据
  3. 转换结果到数据
  4. 数据转换为Base 64字符串。

这是我走到这一步:

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

'ComputeHash'输出一个字节数组,但是你的MD5实现输出一串十六进制字符。 – jnic

+0

我应该从我的md5实现中返回摘要吗? – Daniel

回答

1

我不知道目标C什么,但Encoding.Default.GetBytes()返回使用UTF-16编码的字符串。从名字看,似乎NSUTF8StringEncoding使用UTF-8。

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

相关问题