0

大家好,我有一个问题,这是否是好的做法。我知道由于各种原因,简单地对一个值进行双重散列可能会很糟糕。

我想做的就是这样,在 php.ini 中。

$val = hash_hmac('sha256', md5($password), $salt);

这样做的原因是我们正在通过一个封闭的 api 与一个受信任的合作伙伴进行身份验证。密码以 MD5 散列形式存储在我们的数据库中。但是,我不希望我们的合作伙伴通过网络发送相同的值。

这样,我可以将我们数据库中的 md5 密码与我们的合作伙伴发送的唯一哈希进行比较。

你说什么?

4

1 回答 1

0

首先,这是用户密码(即您代表用户进行身份验证),还是两台服务器之间的共享密码?

如果是用户密码,请停止。您正在以纯文本(或未加盐的 md5)保存密码。无论哪种方式都是不好的。将密码保存为加盐哈希并使用 OAuth 或其他方式进行身份验证。

如果它是两个服务器之间的共享机密(不代表用户),您仍然可以使用 oauth 或其他东西,但如果您只是想要一些简单的东西,您应该像这样进行身份验证:

$val = hash_hmac('sha256', $nonce, $secret);

$nonce是服务器随机选择的一次性值,用于防止重放攻击。

请记住,如果您没有随机数,那么您发送的任何值都是您的共享秘密。如果您从 md5 的 hmac 或其他任何东西派生它并不重要;如果每次都相同,则相当于通过通信通道发送的密码。并记住也要保护来自 MITM 的通信渠道!

于 2011-07-12T22:33:17.390 回答