2

鉴于一次性键盘是牢不可破的(据我所知,请随时纠正我),如果我要生成一个键盘,并在创建用户时使用这个相同的键盘来加密网站的密码,并且将加密的密码存储在我的数据库中,这是一种安全的方法吗?换句话说,只要没有人看到垫子是什么,就可以永远保留同一个垫子吗?

我应该改用 mcrypt 之类的东西吗?

4

2 回答 2

3

您将使用一次性便笺簿对密码进行加密。加密密码并不是最佳选择,因为无论您如何操作,您都可以解密密码。您的应用程序本身必须有权访问密钥(或密钥,因为每个一次性密码只能加密一个密码),如果攻击者有足够的权限,他也可以这样做。

这就是我们使用哈希函数来存储密码的原因,它们是单向的,您可以检查输入的密码是否产生相同的哈希,但您无法取回原始密码。PHP 提供了函数password_hash()来生成这样的哈希值,它通过生成随机盐来处理所有陷阱,并使用慢速 BCrypt 来哈希密码。

于 2013-10-08T19:26:07.193 回答
1

一次页面中的“一次”意味着给定的密钥仅用于加密单个明文。换句话说,您需要加密的每个项目都有一个单独的垫。这就是使它们牢不可破的原因。由于必须将这些单独的垫子存放在某个地方,因此您很容易受到攻击。相反,请使用广泛使用且经过测试的库(例如 mcrypt)并使用 salt 加密您的密码

于 2013-10-08T19:47:27.710 回答