Obj -C Хэш MD5, не соответствующий Java/SQL

Я пытаюсь взять строку юникода, передать ее через хеш-функцию MD5 и закодировать результат как Base64. Мне нужно, чтобы MSSQL, Java и Obj -C давали одинаковый результат. У меня есть согласование MSSQL и Java, но я не могу получить тот же результат, используя Obj -C.

Код Java (возвращает «SC0RfYWqWLK/YNpIDdGi8w==")

String input = "chinese lorem ipsum 槏殟殠巘斖蘱飣偓啅撱簻臗";
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] inputBytes = input.getBytes("UTF-16LE");
md.update(input.getBytes("UTF-16LE"));
byte[] enc = md.digest();
String md5Sum = new sun.misc.BASE64Encoder().encode(enc);
System.out.println(md5Sum);

Код MSSQL (возвращает «SC0RfYWqWLK/YNpIDdGi8w==")

DECLARE @Str nvarchar(200)
SET @Str = N'chinese lorem ipsum 槏殟殠巘斖蘱飣偓啅撱簻臗'
DECLARE @Bin varbinary(max)
SET @Bin = HashBytes('MD5', @Str);
DECLARE @Hash char(24)
SET @Hash = CAST(N'' AS XML).value('xs:base64Binary(sql:variable("@Bin"))', 'NVARCHAR(MAX)')
PRINT @Hash

Obj -Код C (возвращает "vZRPxuE84whftlx697i/Ig==")

NSString *input = @"chinese lorem ipsum 槏殟殠巘斖蘱飣偓啅撱簻臗";
NSData *data = [input dataUsingEncoding:NSUnicodeStringEncoding allowLossyConversion:NO];
unsigned char digest[CC_MD5_DIGEST_LENGTH];
CC_MD5(data.bytes, data.length, digest);
NSData *hashData = [[NSData alloc] initWithBytes:digest length: sizeof digest];
NSString *base64 = [hashData base64EncodedString];
NSLog(@"%@", base64);

Пожалуйста, не могли бы вы помочь мне заставить Obj -C возвращать то же значение, что и другие. Он будет работать в приложении для iOS. Спасибо.

8
задан UserNYC 9 August 2012 в 14:21
поделиться