在MD5哈希时填充字符串

时间:2016-08-28 12:08:26

标签: c++ hash cryptography md5

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

我做的第一件事就是将ASCII字符串转换为十六进制值,并在结束后追加单个0x80,然后在一堆0x00 s之后追加,在最后八个字节处追加十六进制非附加消息的长度。 / p>

例如,“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

1 个答案:

答案 0 :(得分:1)

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

准备好的输入应如下所示:

Encode

您链接的specification of MD5包含您需要知道的所有内容。仔细看看Section" 3.2步骤2.追加长度"以及" A.3 md5c.c"中的 [HttpGet] public ActionResult Delete(int id) { var p= prodRepo.GetProductById(id); return View(p); } [HttpPost] public ActionResult Delete(Product product) { prodRepo.DeleteProduct(product); return RedirectToAction("Index"); } 函数。