gpt4 book ai didi

c++ - MD5 散列时填充字符串

转载 作者:行者123 更新时间:2023-11-30 05:23:24 25 4
gpt4 key购买 nike

我正在尝试在 C++ 中实现 MD5 哈希函数,并为我通过一些在线网站找到的一些输入值获得正确的结果,这些输入值是一些十六进制值。到目前为止,我已经能够让它正常工作。然而,当我尝试用 ASCII 字符串做同样的事情时,我很不走运,无法真正理解我还应该做些什么。

我做的第一件事是将 ASCII 字符串转换为十六进制值,并在末尾附加单个 0x80,然后是一堆 0x00,最后八个字节是未附加消息的十六进制长度。

例如,“test123”用十六进制表示为“0x74、0x65、0x73、0x74、0x31、0x32、0x33”,其字节长度为7。则用作哈希函数输入的字节数组为据我所知,如下所示,

const uint8_t test123Array[64] = {
0x74, 0x65, 0x73, 0x74, 0x31, 0x32, 0x33, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07
};

当我应用哈希函数时,我得到的结果是,

e7 54 fa ea 1e d7 69 ba 85 59 62 bf 16 e9 98 48

而我通过在线哈希生成器网站得到的结果是这样的

cc 03 e7 47 a6 af bb cb f8 be 76 68 ac fe be e5

最佳答案

数据的长度不是以字节为单位,而是以位为单位。所以,长度不是 7,而是 56 (0x38)。然后在 Little-Endian 中将此长度编码为 64 位字节顺序。

准备好的输入应该是这样的:

const uint8_t test123Array[64] = {
0x74, 0x65, 0x73, 0x74, 0x31, 0x32, 0x33, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

specification of MD5你链接到包含你需要知道的一切。仔细查看“3.2 步骤 2。追加长度”部分和“A.3 md5c.c”部分中的 Encode 函数。

关于c++ - MD5 散列时填充字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39191108/

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