使用已知明文和哈希值计算盐?

使用已知明文和哈希值计算盐?

我有一个在 Web 应用程序中使用 md5 哈希来生成哈希的字符串。我也有哈希。但是字符串的 md5 与哈希不匹配,所以我猜想其中涉及盐。有没有什么软件可以帮助我确定盐?

答案1

在标准散列函数(例如 /etc/shadow 中的 UNIX 密码)中,盐存储为散列的一部分。

将存储的哈希值作为盐传递,您应该会得到正确的结果。

/etc/shadow 中的哈希密码值实际上是一个以 $ 分隔的记录。例如,我们有密码“blarg”的哈希值:

$1$KfcI/JTQ$b5VTf4i9Mnf6QFgLuVZNM0

有三个字段以 $ 分隔,分别是

  1. 哈希函数(本例中为“1”,代表 MD5)
  2. 盐(即“KfcI/JTQ”)
  3. 哈希值(即“b5VTf4i9Mnf6QFgLuVZNM0”)

如果多次使用 mkpasswd,哈希值将会改变。

$ mkpasswd -m md5 blarg
$1$Gst52IWk$8ARVeSlpkcZOlyKV10Slu/

$ mkpasswd -m md5 blarg
$1$JeqRviA/$GnH/AvGnZEG9wLfJjiaAt1

但是,通过传入上面哈希值的盐值(即第二个字段),我们可以将其与原始哈希值进行匹配:

$ mkpasswd -m md5 -S KfcI/JTQ blarg
$1$KfcI/JTQ$b5VTf4i9Mnf6QFgLuVZNM0

您还可以传入整个密码哈希(尽管省略了哈希函数)。

$ mkpasswd -m md5 -S KfcI/JTQ$b5VTf4i9Mnf6QFgLuVZNM0 blarg
$1$KfcI/JTQ$b5VTf4i9Mnf6QFgLuVZNM0

在 Linux 上,哈希类型可以在 /etc/login.defs 中控制。更改时请务必小心,否则您可能会完全无法进入系统。我建议仔细阅读手册页,特别是查看标题 MD5_CRYPT_ENAB 和 ENCRYPT_METHOD。

相关内容