Конвертировать C # в Objective-C - строки MD5 и base 64 - PullRequest
0 голосов
/ 31 октября 2011

Мне нужно перевести это в Objective-C, кто-нибудь может помочь?

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 Ответ

1 голос
/ 01 ноября 2011

Я ничего не знаю о Objective C, но Encoding.Default.GetBytes() возвращает строку, закодированную с использованием UTF-16.И из названия, похоже, NSUTF8StringEncoding использует UTF-8.

Итак, чтобы получить те же результаты, что и в C #, вам нужно получить строку, закодированную как UTF-16.

...