gpt4 book ai didi

将 gcrypt MD5 输出与现有哈希进行比较

转载 作者:行者123 更新时间:2023-11-30 15:42:06 25 4
gpt4 key购买 nike

我得到了一个 MD5 输出(一个 16 字节的十六进制字符串),我需要弄清楚用于生成哈希值的消息是什么。

我想将它与 gcrypts gcry_md_hash_buffer() 的输出进行比较,但我确定如何以 strcmp() 知道的方式声明它两者是相同的。

我之前尝试过这个:

char answerHash[16] = {0x57, 0x50, 0x1a, 0xc7, 0xb9, 0xd5, 0x44, 0x0a, 0xde, 0xe8, 0xb3, 0xdd, 0x97, 0x09, 0x72, 0xcb};

但是当我尝试 printf() 时,最终吃掉了不同字符串的一部分

问题区域示例:

gcry_md_hash_buffer(GCRY_MD_MD5, result, answerString, strlen(answerString));

char answerHash[16] = {0x57, 0x50, 0x1a, 0xc7, 0xb9, 0xd5, 0x44, 0x0a, 0xde, 0xe8, 0xb3, 0xdd, 0x97, 0x09, 0x72, 0xcb};

if(strcmp(result, answerHash) == 0){
printf("strcmp() works.\n");
}

编辑:我认为我没有正确解释这一点。我们再试一次。

教授有一条 secret 消息,并向我们提供了它的 MD5 哈希输出。他要我们写一个程序,通过暴力破解找到原始消息。

消息有 11 个字符长,但他已经告诉我们其中 5 个字符是什么。由此,我猜出了 secret 信息,但我还是要写程序。 :(

我已经让 MD5 部分工作了,但我需要弄清楚如何根据他给我们的 MD5 获得我的 MD5 的输出。

换句话说,我需要声明一个变量,以便它包含 profs 哈希,并且可以(通过 strcmp() 或 memcmp(),我不挑剔)与从 gcry_md_hash_buffer( )。

编辑2:

安托万明白了。 memcmp() 可以解决问题!非常感谢!

最佳答案

首先,您应该使用假定固定大小数组的 memcmp,而不是假定以零结尾的字符串的 strcmp,因为您的哈希可能包含零。

其次,我不知道 answerString 来自哪里,但是如果您正在进行强力搜索,则不确定是否能恢复原始字符串,而只是恢复具有相同值的字符串MD5 哈希值。这可能足以也可能不足以满足您的目的。

否则,我不确定您的问题是什么:

    #include <string.h>
static const char a[16] = {0x57, 0x50, 0x1a, 0xc7, 0xb9, 0xd5, 0x44, 0x0a, 0xde, 0xe8, 0xb3, 0xdd, 0x97, 0x09, 0x72, 0xcb};
static const char b[16] = {0x57, 0x50, 0x1a, 0xc7, 0xb9, 0xd5, 0x44, 0x0a, 0xde, 0xe8, 0xb3, 0xdd, 0x97, 0x09, 0x72, 0xcb};
return memcmp(a, b, 16); // => returns 0

现在,您提到了printf。我希望您没有执行 printf(a) ?因为您的散列是一个 char 数组,或者是 C 中的 char* 数组,不幸的是,它也恰好是字符串类型。但两者之间的关键区别在于 C 字符串以零结尾。这意味着每个接受字符串的函数(例如 printfstrlen)除了其 char* 输入以 0。如果不是这种情况,它将危险地扫描变量外部的内存,直到找到 0 字节。

关于将 gcrypt MD5 输出与现有哈希进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20322075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com