Objective-C原始MD5哈希

Objective-C原始MD5哈希,objective-c,binary,char,md5,Objective C,Binary,Char,Md5,在Objective-C中,我生成了一个简单的MD5哈希“HelloKey”,它返回0FD16658AEE3C52060A39F4EDFB11437。不幸的是,我无法获得原始返回,因此我必须使用此字符串来获得原始MD5哈希(或者您知道如何从一开始就获得原始结果?) 无论如何,为了将其转换为raw,我将其拆分为每个2个字符的块,计算十六进制值,并将一个具有该值的字符附加到字符串中 下面是函数: - (NSString *)hex2bin:(NSString *)input{ NSStri

在Objective-C中,我生成了一个简单的MD5哈希“HelloKey”,它返回
0FD16658AEE3C52060A39F4EDFB11437
。不幸的是,我无法获得原始返回,因此我必须使用此字符串来获得原始MD5哈希(或者您知道如何从一开始就获得原始结果?)

无论如何,为了将其转换为raw,我将其拆分为每个2个字符的块,计算十六进制值,并将一个具有该值的字符附加到字符串中

下面是函数:

- (NSString *)hex2bin:(NSString *)input{

    NSString *output = @"";

    for (int i = 0; i < input.length; i+=2){

        NSString *component = [input substringWithRange:NSMakeRange(i, 2)];

        unsigned int outVal;
        NSScanner* scanner = [NSScanner scannerWithString:component];
        [scanner scanHexInt:&outVal];

        /* if(outVal > 127){
            outVal -= 256;
        } */

        // unsigned char appendage = (char)outVal;

        output = [NSString stringWithFormat:@"%@%c", output, outVal];

        NSLog(@"component: %@ = %d", component, outVal);

    }

    return output;

}
但是,当我打印使用特殊函数得到的字符串时,该函数告诉我每个字符的整数值(此处显示的函数):

-(NSString*)str2bin:(NSString*)输入{
NSString*输出=@“”;
对于(NSInteger charIdx=0;charIdx

我得到:
152010288-5830723296-93-4782-792055
。您会注意到有显著的差异,比如209->20174->-58227->30。在某些情况下,差值为256,因此不会造成伤害。但在其他情况下,情况并非如此,我真的很想知道出了什么问题。有什么提示吗?

您做错了,因为您试图将二进制数据存储在NSString中,NSString是UTF8字符串。
您应该使用NSData(或C字符串)来存储二进制哈希表示。

好的,谢谢。向NSData对象追加二进制数据的最佳方法是什么?对于我来说,我将使用NSMutableData的setLength,然后设置c样式的字节数组[data bytes]或类似的东西
0F = 15
D1 = 209
66 = 102
58 = 88
AE = 174
E3 = 227
C5 = 197
20 = 32
60 = 96
A3 = 163
9F = 159
4E = 78
DF = 223
B1 = 177
14 = 20
37 = 55
- (NSString *)str2bin:(NSString *)input{

    NSString *output = @"";

    for (NSInteger charIdx=0; charIdx < input.length; charIdx++){


        char currentChar = [input characterAtIndex:charIdx];
        int charNum = [NSNumber numberWithChar:currentChar].intValue;

        output = [NSString stringWithFormat:@"%@ %d", output, charNum];

    }

    return output;

}