这个问题可能很疯狂,但由于哈希算法的定义,哈希算法是某种接受可变长度输入并对其进行加密的函数,而输出始终具有固定长度,并且对于相同的输入具有相同的输出?考虑以下结果:
root@kali:~# echo "ENDER" | md5pass
$1$rdMOD9CB$LJtbTfwAM3aLuI8L2xOb5.
root@kali:~# echo "ENDER" | md5pass
$1$yINoNkna$Z26YKnZj2foWdTxSGfHOv0
root@kali:~#
root@kali:~#
root@kali:~# echo "ENDER" |md5sum
0ffe655d9777b70867a75c7562657317 -
root@kali:~# echo "ENDER" |md5sum
0ffe655d9777b70867a75c7562657317 -
由于加密 md5pass 哈希程序确实会通过相同的输入更改每个输出,因此 Ubuntu 登录等登录系统如何通过任何输入检测正确的密码?
最后,您能否简要地解释一下这些哈希函数?或者还有其他什么可以区分这两者的东西?谢谢。
答案1
首先,MD5 是一个哈希函数,它读取整个文件/字符串/输入数据并生成默认 128 位长的十六进制格式哈希。当文件或给定字符串相同时,该哈希始终相同。
使用实用程序,md5pass
您可以执行完全相同的操作,但哈希会被“加盐”。在密码学中,“盐”是随机数据,用作单向函数的附加输入,该函数对密码或密码短语进行哈希处理以提高熵。这就是为什么md5pass
总是输出不同的值。
为何要加盐?
问题是,当用户使用相同的密码时,他们拥有相同的哈希值。如果哈希值是随机加盐的,则每个密码的哈希值都不同。盐必须单独保存在另一个表中,因为需要它来验证密码。md5pass
盐可以定义(作为第二个参数)。如果没有定义盐,系统会生成一个随机盐。
另一个优点是,如果是 MD5 或 SHA彩虹桌效果不如不加盐,因为不加盐时,每个密码只需计算一次哈希值。