大家好,我有一个关于加密/解密个人敏感信息的安全问题:身份(姓名,地址,电话号码),银行详细信息(排序代码和帐号)几乎所有内容都经过加密,只有个人可以访问并由授权人员使用个人资料。现在主要的问题是:
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)。
答案 0 :(得分:3)
加密任何敏感信息和在数据库中存储密钥没有任何安全优势。它与锁定安全和钥匙孔中的钥匙相同。至少您需要将密钥存储在文件系统上,而不是存储在数据库中。在这种情况下,如果您的数据库被泄露(例如由于SQL注入攻击),攻击者将无法解密它,因为他们没有密钥。
修改强> 无法保护包含密钥的文件,因为PHP需要读取它才能进行必要的操作。但是,您可以使用HSM(硬件安全模块)设备在那里存储密钥。例如,请查看YubiHSM。