hash - 实现 MD5 : Inconsistent endianness?

标签 hash byte md5 bit

所以我尝试按照RFC1321实现MD5算法在 C# 中它可以工作,但是关于填充的执行方式有一件事我不明白,这里有一个例子:

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

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

由于原始消息的长度是8(位),我预计会附加00000000000000000000000000001000 00000000000000000000000000000000(低位字在前)。然而,这不会产生正确的哈希值,但附加 00010000000000000000000000000000 00000000000000000000000000000000 会产生正确的哈希值。

这看起来好像突然使用了小端格式,但这似乎根本没有任何意义,所以我想我一定还缺少其他东西?

最佳答案

是的,对于 md5,您必须以小尾数法添加消息长度。

因此,消息表示为“1” -> 49 -> 00110001,后跟一位和零。然后以相反的字节顺序添加消息长度(首先是最低有效字节)。

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

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

md5_debug_mode

关于hash - 实现 MD5 : Inconsistent endianness?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48818204/

相关文章:

C# 版本的 OpenSSL EVP_BytesToKey 方法?

java - 是否有 PHP 函数 "hash"的 Java 等价物?

php - 我如何从 mysql 数据库验证用户密码

encryption - 密码和不同类型的加密

Java-将缓冲图像转换为字节[]而不写入磁盘

android - 我的 mapView 不显示 map 只显示叠加项

php - 散列密码,从 splinter 的方法到现在最安全的方法

python - 如何将字节字符串拆分为单独的部分

Java如何从randomaccessfile中读取字符串?

linux - 终端:将文件内容(电子邮件)转换为MD5