【问题标题】:MD5 hashing Algorithm step 2 and 3MD5 散列算法步骤 2 和 3
【发布时间】:2018-10-17 22:15:19
【问题描述】:

我创建了a repository on github 来编写一些计算机安全算法,是时候编写 MD5 算法了,我搜索了一些论文/视频,通过示例和步骤来解释算法,但我没有。

  • 我是为第 1 步写的,我不知道这是否正确?

    //step1
    var textP = ToBinaryString(Encoding.UTF8, text);
    textP = textP.Length < 448 ? textP + '1' : textP;
    while (textP.Length <448)
    {
        textP += '0';
    }
    Console.WriteLine(textP);
    
  • 第二步:到第2步,追加长度

    将 b 的 64 位表示附加到上一步的结果中 结果消息的长度是 512 位的精确倍数

    意思是把字符串的原始位追加到448位?

【问题讨论】:

  • “我搜索了有关论文/视频,通过示例和步骤来解释算法,但我没有......” - MD5 已经被描述和实现了很多次我很难相信你找不到任何东西。
  • @jww 好的,您能否推荐其中一个描述示例的示例,其中包含显示位变化状态的步骤?!

标签: hash cryptography md5 crypt


【解决方案1】:

不,第一步不正确,因为如果块中剩余的位少于 64 位,它不会正确填充。在这种情况下,填充必须跨越两个块 - 首先放入 1 并用零填充其余部分,然后创建一个 448 位块。

第二句话我不清楚。需要在填充发生后添加以位为单位的输入大小的 64 位编码。


请注意,您正在尝试从字面上重新创建算法描述。这不是一个好主意。您需要处理明文块,计算位数或字节数,然后在指示 stream 结束时执行填充和长度编码。您需要一个 512 位缓冲区、一个 updatefinal 方法。

使用表示二进制的字符串来创建哈希不是一个好主意。您应该在内部处理字节和可能的单词。您只需要对任何内容进行编码即可进行调试。

【讨论】:

  • 嘿,这是我在cryptography 上的第 1K 答案!只剩 24 岁了,我可以庆祝我的第 1Ki 个答案!
猜你喜欢
  • 2014-06-04
  • 2013-07-22
  • 1970-01-01
  • 2016-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-17
  • 2011-06-08
相关资源
最近更新 更多