【问题标题】:Comparing gcrypt MD5 outputs to a existing hash将 gcrypt MD5 输出与现有哈希进行比较
【发布时间】:2013-12-17 19:03:10
【问题描述】:

我得到了一个 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");
}

编辑:我认为我的解释不正确。让我们再试一次。

教授有一个秘密消息,并给了我们它的 MD5 哈希输出。他要我们编写一个程序,通过蛮力找到原始消息。

消息有 11 个字符长,但他已经告诉我们其中 5 个字符是什么。从这里,我猜到了秘密信息,但我仍然要编写程序。 :(

我的 MD5 部分已经在工作,但我需要弄清楚如何将我从 MD5 获得的输出与他给我们的 MD5 进行对比。

换句话说,我需要声明一个变量,以便它包含 profs 哈希,并且可以与我从 gcry_md_hash_buffer( )。

EDIT2:

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

【问题讨论】:

    标签: c hash md5 libgcrypt


    【解决方案1】:

    首先,您应该使用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 中也恰好是字符串类型。但两者之间的关键区别在于 C 字符串是零终止的。这意味着每个接受字符串的函数,例如printfstrlen,除了其char* 输入被0 终止。如果不是这种情况,它将危险地扫描变量外部的内存,直到找到 0 字节。

    【讨论】:

    • 这是学校作业。这里没有黑帽。
    • 我实际上已经弄清楚(猜到)原始消息(457 很酷),这就是 answerString 是什么。程序必须通过创建一个字符串来强制消息,通过 MD5 发送它,然后将生成的散列与我们给出的散列进行比较。问题是我不知道如何以 strcmp(或 memcmp)会找到匹配项的方式将给定的哈希放入程序中。
    • 我不明白你的问题,对不起。您能否尝试解释一下“如何以 memcmp 将找到匹配项的方式将给定的哈希值放入程序中”的意思?
    • 也许您正在尝试使用 printf 显示哈希?正如我在编辑中所解释的那样,这将非常难看:\
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 2021-09-27
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    相关资源
    最近更新 更多