我正在处理一个非常小的表格,接受信用卡号码,此后不久便会清理。对于它们存在于数据库中的时间,我希望它们以舒适的加密状态存在。不幸的是,在我多年的网络开发,编程和数据库开发方面,我从来没有机会在加密领域进行自我教育。
是否有相对容易实施的加密信用卡号码的方法,我可以快速实施?一组功能,类,什么都可以完成工作,并且做得好?我借此机会就这个问题进行自我教育,但由于时间敏感,不仅要求在正确的方向上轻推。
语言:PHP /存储:MySQL
答案 0 :(得分:4)
最好的方法之一是简单地使用MySQL进行加密/解密。请参阅以下功能:
http://dev.mysql.com/doc/refman/5.1/en/encryption-functions.html
但是,请记住,虽然这可以保护您免受可能找到方法来读取数据库的人的影响,但它不能防止拥有该服务器的人。那是因为解密密钥存在于服务器上。
总而言之,这是一个巨大的推动力。真正的安全性来自公钥加密和使用安全私钥的脱机解密(例如,不同的服务器)。
举个例子:
INSERT INTO BillingInfo
SET CCard = AES_ENCRYPT('4111...', 'super-secret-key')
...
和
SELECT
AES_DECRYPT(CCard, 'super-secret-key')
...
具体功能如下:
http://dev.mysql.com/doc/refman/5.1/en/encryption-functions.html#function_aes-encrypt
有关AES的更多信息,请参阅:
http://en.wikipedia.org/wiki/Advanced_Encryption_Standard
为了最大限度地保护您的环境,我建议您将密钥存储在PHP常量中。它不太可能在运行时以这种方式泄露(细节)。
答案 1 :(得分:0)
它不那么“简单”,但如果您的应用程序不需要读回存储的信用卡(即它们只能被系统的其他部分读取),您可以使用公钥加密来加密信息以这种方式,你自己的webapp无法解密它。
这样,即使攻击者获得了对数据库和webapp自己的脚本的访问权限,他们仍然无法获取卡数据。只有系统的另一个卡处理部分(可能更容易被攻击锁定)才能解密它们。
您将从openssl_public_encrypt功能开始。 example use