Php 创建随机生成的安全令牌并存储在数据库中

Php 创建随机生成的安全令牌并存储在数据库中,php,security,hash,salt,Php,Security,Hash,Salt,我试图为我网站上的每个用户生成一个唯一的令牌。令牌是在用户注册时生成的,理想情况下尽可能安全。这样做的最佳方法是什么,以允许我向用户显示令牌 此令牌不是密码,用户不会自己创建它。如果我在注册时对它进行哈希和盐处理,我显然无法检索它,因为它是经过哈希和盐处理的。我想要一个简单的方法通过PHP实现,并且能够轻松地向用户显示它。关于: md5(uniqid('', true)) 散列是单向的,因此反转散列的唯一方法是存储原始值,使散列成为冗余 如果只需要显示一次值,然后将值存储到变量中,在页面上打印

我试图为我网站上的每个用户生成一个唯一的令牌。令牌是在用户注册时生成的,理想情况下尽可能安全。这样做的最佳方法是什么,以允许我向用户显示令牌

此令牌不是密码,用户不会自己创建它。如果我在注册时对它进行哈希和盐处理,我显然无法检索它,因为它是经过哈希和盐处理的。我想要一个简单的方法通过PHP实现,并且能够轻松地向用户显示它。

关于:

md5(uniqid('', true))

散列是单向的,因此反转散列的唯一方法是存储原始值,使散列成为冗余

如果只需要显示一次值,然后将值存储到变量中,在页面上打印它,而不保存它,这对您来说是安全的


另一种选择是只使用数据库加密来存储令牌,然后在向用户显示之前解密。假设您使用MySQL,您可能会发现这一点很有帮助:

不会降低zerkms的评论。但我推荐crypt()


非散列值对用户有什么作用

用户将如何使用此令牌

真正的问题是你所说的安全是什么意思。我假设你的意思是“不可用”,也就是说它必须是长的和/或复杂的

然而,如果用户需要记住它,这是一个问题


因此,真正的问题是,你想让猜测变得多么困难,你想让回忆变得多么容易?

听起来你想要一个自动增量字段=)我如何从数据库中检索并打印非散列值?@seeARMS:你不需要非散列值。散列本身就是一个令牌。我不希望将令牌公开存储在数据库中。。。这就是把它用盐腌制的意义所在。如果有人能访问我的数据库,我希望令牌能安全地存储。@seeARMS:不,你错了。开放式salt并不会降低散列数据的安全性。我想你不明白我想做什么。我想随机生成一个令牌,然后将其安全地存储在数据库中。如果我将您的代码存储在数据库中,任何有权访问该数据库的人都可以轻松地恶意使用该令牌。我知道如何随机生成一个令牌(这就是您所做的),但是我想要一种安全存储它的方法。