【问题标题】:Implementing MD5: Inconsistent endianness?实施 MD5:字节顺序不一致?
【发布时间】:2019-07-13 19:17:36
【问题描述】:

所以我尝试在 C# 中根据RFC1321 实现 MD5 算法并且它可以工作,但是关于填充的执行方式有一点我不明白,这是一个示例:

如果我想对字符串“1”(不带引号)进行哈希处理,则会产生以下位表示:10001100

下一步是添加单个“1”位,由 00000001(大端序)表示,然后是“0”位,然后是 64 位表示原始消息的长度(低位字在前)。

由于原始消息的长度为 8(位),我预计要附加 00000000000000000000000000001000 000000000000000000000000000000000(低位字优先)。但是,这不会导致正确的哈希值,但附加 00010000000000000000000000000000 00000000000000000000000000000000 会。

这看起来好像突然使用了 little-endian 格式,但这似乎根本没有任何意义,所以我想一定还有什么我遗漏的东西?

【问题讨论】:

    标签: hash byte md5 bit


    【解决方案1】:

    是的,对于 md5,您必须在 little-endian 中添加消息长度。

    因此,“1”的消息表示 -> 49 -> 00110001,后跟单个位和零。并且在以相反的字节顺序添加消息长度之后(最低有效字节在前)。

    您也可以在此站点上逐步检查排列:https://cse.unl.edu/~ssamal/crypto/genhash.php

    或者那里:https://github.com/MrBlackk/md5_sha256-512_debugger

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-30
      • 1970-01-01
      • 2019-04-08
      • 1970-01-01
      • 1970-01-01
      • 2019-05-02
      • 1970-01-01
      相关资源
      最近更新 更多