Ara*_*ian 2 linux grub encryption
Grub 的 MD5 算法是如何工作的?当你运行 grub-md5-crypt 并每次得到不同的结果时输入相同的密码。通常 md5 应该总是返回相同的哈希值,那么为什么 grub 的版本每次都返回不同的东西?
另外,考虑到这一点,如何确定您输入的密码正确?如果您使用相同密码创建的每个加密都会生成不同的散列,那么稍后您输入密码(理论上使用相同的算法)时,由于散列的不同,它们如何匹配以显示您提供了正确的密码?
我假设在某处使用了盐,并且盐是随机生成的,但是盐是什么,它是如何准确生成的,然后又是如何复制的?
该密码哈希是加盐的。盐是随机生成的,并与哈希一起存储。salt 和 hash 之间的字段分隔符是美元符号 ($)。
http://en.wikipedia.org/wiki/Salt_%28cryptography%29
小智 5
grub 源代码是最好的查找位置。必要的逻辑stage2/md5.c在:
int md5_password (const char *key, char *crypted, int check)
Run Code Online (Sandbox Code Playgroud)
它产生以下形式的字符串:$1$aaaaaaaa$bbbbbbbbbbbbbbbbbbbbbb其中“aaaaaaaaa”序列是随机盐,“bbbbbbbbbbbbbbbbbbbbbb”是密码和盐以特定方式混合1000次的结果,并采用修改后的base64编码md5 结果。
修改后的 base64 字典是:
./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
Run Code Online (Sandbox Code Playgroud)
实际的混合算法可以根据 GNU 通用公共许可证第 2 版(或任何更高版本)的条款重新分发,您可以从GNU FTP 站点或任何 GNU 镜像获得它。