MD5 哈希算法步骤 2 和 3
MD5 hashing Algorithm step 2 and 3
我创建了 a repository on github 来编写一些计算机安全算法,现在是编写 MD5 算法的时候了,我搜索了 papers/videos 通过示例和步骤解释算法,但我没有.
我为第 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步,追加长度
A 64 bit representation of b is appended to the result of the previous step
The resulting message has a length that is an exact multiple of 512 bits
意思是在448bits后追加字符串的原始位?
不,第一步不正确,因为如果块中剩余的少于 64 位,则它不会正确填充。在那种情况下,填充将必须跨越两个块 - 首先放入 1 并用零填充其余部分,然后创建一个 448 位块。
第二句我不清楚。填充后需要添加输入大小的 64 位编码。
请注意,您正试图从字面上重新创建算法描述。那不是一个好主意。您需要处理明文块,记录位数或字节数,然后在指示 stream 结束时执行填充和长度编码。您需要一个 512 位缓冲区,一个 update
和 final
方法。
使用表示二进制的字符串创建散列不是一个好主意。您应该在内部处理字节和可能的单词。您只需要为调试目的对任何内容进行编码。
我创建了 a repository on github 来编写一些计算机安全算法,现在是编写 MD5 算法的时候了,我搜索了 papers/videos 通过示例和步骤解释算法,但我没有.
我为第 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步,追加长度
A 64 bit representation of b is appended to the result of the previous step The resulting message has a length that is an exact multiple of 512 bits
意思是在448bits后追加字符串的原始位?
不,第一步不正确,因为如果块中剩余的少于 64 位,则它不会正确填充。在那种情况下,填充将必须跨越两个块 - 首先放入 1 并用零填充其余部分,然后创建一个 448 位块。
第二句我不清楚。填充后需要添加输入大小的 64 位编码。
请注意,您正试图从字面上重新创建算法描述。那不是一个好主意。您需要处理明文块,记录位数或字节数,然后在指示 stream 结束时执行填充和长度编码。您需要一个 512 位缓冲区,一个 update
和 final
方法。
使用表示二进制的字符串创建散列不是一个好主意。您应该在内部处理字节和可能的单词。您只需要为调试目的对任何内容进行编码。