Grub MD5 加密算法

Grub MD5 加密算法

Grub 的 MD5 算法是如何工作的?当您运行 grub-md5-crypt 并输入相同的密码时,每次都会得到不同的结果。一般来说,md5 应该总是返回相同的哈希值,那么为什么 grub 的版本每次都返回不同的内容呢?

另外,考虑到这一点,那么如何确定您输入的密码正确呢?如果使用相同密码的每次加密创建都会生成不同的哈希值,那么稍后当您输入密码时(理论上使用相同的算法),由于哈希值会不同,它们如何匹配以显示给您提供了正确的密码?

我假设某个地方使用了盐,并且盐是随机生成的,但是盐是什么,它是如何准确生成的,然后是如何复制的?

答案1

grub 源代码是查找的最佳位置。必要的逻辑位于stage2/md5.c

int md5_password (const char *key, char *crypted, int check)

它生成以下形式的字符串:$1$aaaaaaaa$bbbbbbbbbbbbbbbbbbbbbb其中“aaaaaaaa”序列是随机盐,“bbbbbbbbbbbbbbbbbbbbbbbb”是以特定方式将密码和盐混合 1000 次的结果,并采用修改后的 base64 编码md5 结果。

修改后的base64字典是:

./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

实际的混合算法可以根据 GNU 通用公共许可证版本 2(或任何更高版本)的条款重新分发,您可以从GNU FTP 站点或任何 GNU 镜像。

答案2

该密码哈希是加盐的。盐是随机生成的并与哈希一起存储。 salt 和 hash 之间的字段分隔符是美元符号 ($)。

http://en.wikipedia.org/wiki/Salt_%28cryptography%29

相关内容