PHP - 使用一次性键盘存储加密密码


PHP - Using a one-time pad to store encrypted passwords

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

子吗?

我应该改用像mcrypt这样的东西吗?

您将使用一次性键盘执行的操作是加密密码。加密密码不是最佳的,因为无论您如何操作,您都可以解密密码。您的应用程序本身必须有权访问密钥(或密钥,因为每个一次性键盘只能加密一个密码(,因此如果攻击者具有足够的权限,则可以进行攻击者攻击。

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

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