在Objective-c中将二进制哈希表示为HEX / Ascii

时间:2017-03-16 17:31:46

标签: ios objective-c hash theos

我想在控制台中使用十六进制或ascii表示来记录二进制哈希表示。算法是MD5,因此函数是CC_MD5

我通过Theos调整获得了二进制哈希表示,这种方法运行良好。

编辑:此调整拦截了CC_MD5来电。该调用以下述方法实现。调用CC_MD5时,replaced_CC_MD5会拦截来电。

测试的应用程序是一个简单的应用程序,我自己制作并使用此方法计算MD5哈希:

- (NSString *) md5:(NSString *) input
{
    const char *cStr = [input UTF8String];
    unsigned char digest[16];
    CC_MD5( cStr, strlen(cStr), digest ); // This is the md5 call

    NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];

    for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
        [output appendFormat:@"%02x", digest[i]];

    return  output;

}

散列它没关系,应用程序返回给我正确的输入哈希值

input = prova
MD5 Digest = 189bbbb00c5f1fb7fba9ad9285f193d1

我操作CC_MD5功能的Theos Tweak中的功能是

编辑:其中datacStrlenstrlen(cStr)mddigest }。

static unsigned char * replaced_CC_MD5(const void *data, CC_LONG len, unsigned char *md) {
    CC_LONG dataLength = (size_t) len;
    NSLog(@"==== START CC_MD5 HOOK ====");

    // hex of digest
    NSData *dataDigest = [NSData dataWithBytes:(const void *)md length:(NSUInteger)CC_MD5_DIGEST_LENGTH];
    NSLog(@"%@", dataDigest);

    // hex of string
    NSData *dataString = [NSData dataWithBytes:(const void *)data length:(NSUInteger)dataLength];
    NSLog(@"%@", dataString);

    NSLog(@"==== END CC_MD5 HOOK ====");

    return original_CC_MD5(data, len, md);

}

dataString的日志没问题:70726f76 61这是prova的HEX表示形式 dataDigest的日志为e9aa0800 01000000 b8c00800 01000000,如果我理解,则为二进制哈希表示。

如何将此表示转换为MD5哈希摘要?

1 个答案:

答案 0 :(得分:0)

replaced_CC_MD5 {/ 1}} 之前显示md ,之后调用original_CC_MD5来设置其值。因此,您所看到的是随机数据(或最后存储在md中的任何内容)。

将调用移至original_CC_MD5到显示语句之前,您应该看到预期的值。 (您当然需要将调用结果保存在本地,以便您可以在return语句中返回值。)