如何安全地将密码存储在 mysql 中以便稍后在 php 中解密它们,而不是散列?

How to safety store passwords in mysql to decrypt them later in php, not hash?

需要将来自其他服务的密码存储在 mysql 中。哈希不起作用,我需要解密密码。如何安全地做到这一点?只有我认为安全的方法是使用带有解密密钥的硬件令牌?还有其他问题吗?抱歉我的英语不好。

您询问如何以可以自动解密的方式安全地将加密数据存储在 MySQL 中。

事情是这样的:加密和解密本身很容易。 Php 提供 mcrypt 包。 http://php.net/manual/en/mcrypt.examples.php

但是,此类过程的安全性取决于安全的密钥管理。如果您使用 MySQL 的应用程序能够解密数据,并且密钥可用,那么渗透您系统的网络犯罪分子将可以访问它。网络犯罪分子可以读取您的 php 代码,查看您如何解密这些数据,然后自己动手。所以这个过程的安全性取决于你的对手获得你的钥匙的难易程度。

我想您可以创建一个接受加密数据并返回解密数据的 Web 服务。该 Web 服务可以将密钥保存在其中。您可以通过几种方式保护它:

  1. 将其放在防火墙后面
  2. 速率限制为每秒几十次解密操作
  3. 将解密密钥保存在其中。
  4. 记录所有操作(但不包括解密数据)并认真监控日志。

另一种可能性是在客户端做一些事情。名为 Keepass 的开源密码保险箱 http://keepass.info/ is a good example, and so is Bruce Schneier's password manager. https://www.schneier.com/blog/archives/2014/09/security_of_pas.html

单向密码散列 (http://php.net/manual/en/book.password.php) 可防止解密,但仍允许密码验证。单向散列的密码更难窃取。

恕我直言,如果密码保护宝贵的资产,这不是一个适合没有经验的人的项目。网络犯罪分子远远领先于我们其他人。