openssl如何解密密码

openssl如何解密密码

我正在学习linux和php上的加密和解密。所以我对 openssl 以及它如何生成密码哈希有三个问题。

1-假设我用 linux 命令生成了一个密码

openssl passwd

我的第一个观察是,每次生成哈希值时,它都是不同的!这是为什么?是因为盐的原因吗?这是我的第一个问题。

2-现在我的第二个问题是关于测试这个密码。假设我想测试这个密码的正确性并得到一个二进制答案,无论它是否正确。我该如何使用 openssl 做到这一点?如果我的问题没有意义,那么有什么openssl passwd用呢?

3-如果我使用散列加密我的密码openssl passwd,并且每次添加随机盐时,openssl如何解密它(或任何其他程序)?

谢谢。

答案1

openssl 使用算法和盐来加密您的密码。如果您不提供盐,则会随机选择。

盐在结果哈希中给出。

例如

 openssl passwd -1 foo
 $1$pyuddMjp$3.deTnHdrVVVLoh5zkQ0B.

在哪里

  • 1 是 proticol(这里是 md5)
  • pyuddMjp 是盐

如果我想验证您是否知道 passwd(即 foo),我需要使用带有 salt 的 passwd 选项来比较结果哈希。

  • x=条

    openssl passwd -1 -salt pyuddMjp $x $1$pyuddMjp$kNkQHWoF8WVh7Oxvae5YX1

  • 与 x=foo

    openssl passwd -1 -salt pyuddMjp $x $1$pyuddMjp$3.deTnHdrVVVLoh5zkQ0B。

答案2

首先openssl命令通常不用于加密密码。您可以在以下位置阅读有关 openssl 的信息:http://en.wikipedia.org/wiki/OpenSSL

在 Unix 系统上,密码是使用单向哈希加密的,因此无法解密它们以恢复原始密码。

在一种加密方式中,盐通常是预先确定的字符串或从纯文本版本生成的,例如前几个字符,您将使用它来重新生成哈希并比较两者。

你提到了php,你可以检查一下PHP 地穴功能以获取更多信息。

答案3

建立在已接受的答案的基础上。我想验证密码哈希是否与最初设置的密码匹配 - 或者想法要设置。

首先,我不希望密码显示在命令行历史记录中,所以对于

# cat > pass.txt
mypasswd1
<ctrl>+d

# cat > badpass.txt
faulty
<ctrl>+d

然后我创建一个 MD5 哈希值:

# RET=$(openssl passwd -1 -in pass.txt)
# echo $RET
$1$nhyuaE7S$ld2wuucUlRUQE8iAnJhjF/

“salt”是第三个字段,由 $ 分隔(包括前导/空字段)。节约“盐”

# SALT=$(echo $RET | cut -d\$ -f 3)
# echo $SALT
nhyuaE7S

因此,为了查看密码是否确实与 MD5 哈希值匹配,我将$RET变量中保存的哈希值与“test”的第一行进行比较。

# echo "$RET" ; openssl passwd -1 -salt "$SALT" $(cat pass.txt) "$RET"
$1$nhyuaE7S$ld2wuucUlRUQE8iAnJhjF/
$1$nhyuaE7S$ld2wuucUlRUQE8iAnJhjF/
$1$nhyuaE7S$3pGvIF7UwuvhJjXzR4Yb.0

它们看起来很匹配,让diff我们检查一下:

# diff <(echo "$RET") <(openssl passwd -1 -salt "$SALT" $(cat pass.txt) "$RET" | head -1)
# echo $?
0

到目前为止一切顺利,但让我们也检查一下“错误”密码,看看我们没有匹配的密码。

# echo "$RET" ; openssl passwd -1 -salt "$SALT" $(cat badpass.txt) "$RET"
$1$nhyuaE7S$ld2wuucUlRUQE8iAnJhjF/
$1$nhyuaE7S$t6MTdY2QafzUtBMMVzf5B.
$1$nhyuaE7S$3pGvIF7UwuvhJjXzR4Yb.0

# diff <(echo "$RET") <(openssl passwd -1 -salt "$SALT" $(cat badpass.txt) "$RET" | head -1) >/dev/null
# echo $?
1

所以现在我们有一个测试,它实际上可以“证明”存储的 MD5 哈希值(即在配置文件中)与我们的密码匹配思考是正确的。

如果我的假设有任何错误或不正确,请在评论中告知。

相关内容