Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将C#转换为Objective-C-MD5和base 64字符串_C#_Objective C_Hash_Md5 - Fatal编程技术网

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

将C#转换为Objective-C-MD5和base 64字符串,c#,objective-c,hash,md5,C#,Objective C,Hash,Md5,我需要把这个翻译成Objective-C,有人能帮忙吗 var randomString = "abc"; var computedHash = Convert.ToBase64String(new MD5CryptoServiceProvider().ComputeHash(Encoding.Default.GetBytes(computedValue))); 首先这里发生了什么 我以为是: 从随机字符串中获取字节数据 MD5 将结果转换为数据 将该数据转换为64进制字符串 到目前为止,我得

我需要把这个翻译成Objective-C,有人能帮忙吗

var randomString = "abc";
var computedHash = Convert.ToBase64String(new MD5CryptoServiceProvider().ComputeHash(Encoding.Default.GetBytes(computedValue)));
首先这里发生了什么

我以为是:

  • 从随机字符串中获取字节数据
  • MD5
  • 将结果转换为数据
  • 将该数据转换为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
    

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


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

    ComputeHash
    输出一个字节数组,但MD5实现输出一个十六进制字符串。我应该从MD5实现返回摘要吗?