我正在处理一个很小的表格,它可以接受信用卡号,此后不久便会清除.对于它们存在于数据库中的时间,我希望它们以舒适的加密状态存在.不幸的是,在我多年的Web开发,编程和数据库开发工作中,我一次没有机会进行有关加密领域的自我教育.
有没有我可以快速实施的相对容易实现的加密信用卡号的方法?一组函数,类,所有可以完成工作并且做得很好的东西?我借此机会对这个问题进行自我教育,但是由于时间敏感性,我们不仅仅要求向正确的方向发展.
解决方法:
最好的方法之一是简单地使用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常量中.这样不太可能在运行时泄露(较小的细节).