在PHP中创建不包含其salt的哈希

时间:2014-06-26 16:19:57

标签: php encryption hash

对于用户验证电子邮件,我想向我的用户发送一封电子邮件,其中包含基于用户ID和随机生成的salt的安全散列。然而,所有php的功能都针对密码散列,因此将盐存储在哈希中以进行密码验证。由于我打算向用户发送此哈希值,因此不需要这样做。

我知道md5功能,它不包含盐,但我会相信md5哈希不安全。

有没有办法在PHP中散列(最好用一行代码)一个字符串并返回一个没有盐的纯哈希?

4 个答案:

答案 0 :(得分:3)

您可以向任何哈希添加salt。它只是一个字符串添加到你正在散列的任何东西。但是,这里使用的最佳方法是随机字符串,它与您服务器上的电子邮件地址一起存储。当用户尝试验证时,您将与随机字符串进行比较。然后,无需担心某人仅根据电子邮件地址的知识生成哈希值。

答案 1 :(得分:1)

我没有完全获得您的协议,但如果您只是在PHP中寻找安全哈希,那么请将hashalgo = "sha256"一起使用。

确保您了解使用PHP散列字符串时使用的(默认)字符编码。

答案 2 :(得分:0)

首先使用base64_encode进行哈希,然后使用md5再次对结果值进行哈希处理。这将使您获得安全的哈希结果。

答案 3 :(得分:0)

据我所知,这根本不是一个盐,而是你想使用来隐藏用户ID。用户标识是您稍后要验证的内容。为了能够验证此用户ID,您必须将密钥存储在某处。

现在,无论如何你必须存储这个密钥,那么你可以采取更好的方法。生成随机令牌,该令牌不是来自任何现有数据(并且不会泄漏任何内容),并将此令牌的哈希值与用户ID一起存储在数据库中。您发送给用户的原始令牌。用户单击链接后,您可以使用存储的哈希验证令牌。

因为随机令牌是一个非常强大的密码" (大约20个随机选择的字符)在没有盐的情况下计算像SHA-256这样的简单哈希是绝对安全的。这允许在数据库中搜索散列标记。