Objective-c 中 HEX/Ascii 的二进制哈希表示
Binary hash representation to HEX/Ascii in Objective-c
我想在控制台中记录二进制哈希表示,使用十六进制或 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;
}
散列没问题,应用 returns 对我来说输入的正确散列
input = prova
MD5 Digest = 189bbbb00c5f1fb7fba9ad9285f193d1
Theos Tweak 中我操作 CC_MD5 函数的函数是
编辑:其中 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
的十六进制表示
dataDigest
的日志是 e9aa0800 01000000 b8c00800 01000000
,如果我理解的话,它是 binary 哈希表示。
如何将此表示转换为具有 MD5 哈希摘要?
在 replaced_CC_MD5
中,您显示 md
在 调用 original_CC_MD5
之前设置其值。因此,您看到的是随机数据(或最后存储在 md
中的任何数据)。
将对 original_CC_MD5
的调用移到显示语句之前,您应该会看到您期望的值。 (您当然需要将调用结果保存在本地,以便您可以 return return
语句中的值。)
我想在控制台中记录二进制哈希表示,使用十六进制或 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;
}
散列没问题,应用 returns 对我来说输入的正确散列
input = prova
MD5 Digest = 189bbbb00c5f1fb7fba9ad9285f193d1
Theos Tweak 中我操作 CC_MD5 函数的函数是
编辑:其中 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
的十六进制表示
dataDigest
的日志是 e9aa0800 01000000 b8c00800 01000000
,如果我理解的话,它是 binary 哈希表示。
如何将此表示转换为具有 MD5 哈希摘要?
在 replaced_CC_MD5
中,您显示 md
在 调用 original_CC_MD5
之前设置其值。因此,您看到的是随机数据(或最后存储在 md
中的任何数据)。
将对 original_CC_MD5
的调用移到显示语句之前,您应该会看到您期望的值。 (您当然需要将调用结果保存在本地,以便您可以 return return
语句中的值。)