1

大家好,我有一个关于加密/解密个人敏感信息的安全问题:身份(姓名、地址、电话号码)、银行详细信息(排序代码和帐号)授权人使用个人数据。现在主要的问题是: 1. 我的方法足够安全吗?
2.有没有更好的方法?
3. 我应该在哪里使用来自数据库或 $_SESSION 的密钥?(最好在哪里使用它们进行解密,以便用户查看他的详细信息)

这是代码:
$iv = mcrypt_create_iv(32, MCRYPT_RAND);
$key = mcrypt_create_iv(32, MCRYPT_RAND);
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $unencrypted, MCRYPT_MODE_CBC, $iv);

那是为了在我将数据发送到数据库之前对其进行加密

$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $encrypted, MCRYPT_MODE_CBC, $iv );

这就是解密方法。(使用上面示例中的 $encrypted、$key 和 $iv)。

4

1 回答 1

3

加密任何敏感信息并将密钥存储在数据库中没有安全优势。这与锁定保险箱并将钥匙留在钥匙孔中相同。至少您需要将密钥存储在文件系统上,而不是数据库中。在这种情况下,如果您的数据库被泄露(例如由于 SQL 注入攻击),攻击者将无法解密它,因为他们没有密钥。

编辑 没有办法保护包含密钥的文件,因为 PHP 需要读取它才能进行所需的操作。但是,您可以使用 HSM(硬件安全模块)设备将密钥存储在那里。以YubiHSM为例。

于 2012-08-15T15:23:44.767 回答