我想在控制台中使用十六进制或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中的功能是
编辑:其中data
为cStr
,len
为strlen(cStr)
,md
为digest
}。
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哈希摘要?
答案 0 :(得分:0)
在replaced_CC_MD5
{/ 1}} 之前显示md
,之后调用original_CC_MD5
来设置其值。因此,您所看到的是随机数据(或最后存储在md
中的任何内容)。
将调用移至original_CC_MD5
到显示语句之前,您应该看到预期的值。 (您当然需要将调用结果保存在本地,以便您可以在return
语句中返回值。)