对于我的电子商务网站,我想将部分信用卡号存储为字符串,为此我需要加密存储在数据库中的信息,并在用户想要重用之前购买的已输入信用卡信息而不用全部输入时解密再次。
我正在使用 Django,因此我需要通过 Python 解决这个问题。解决这个问题的聪明算法是什么?
对于我的电子商务网站,我想将部分信用卡号存储为字符串,为此我需要加密存储在数据库中的信息,并在用户想要重用之前购买的已输入信用卡信息而不用全部输入时解密再次。
我正在使用 Django,因此我需要通过 Python 解决这个问题。解决这个问题的聪明算法是什么?
在您进一步了解之前,您应该看一下PCI-DSS,它准确地控制了您甚至考虑存储加密卡号所需的流程。简而言之,您应该认真考虑外包给第三方支付网关。
如果一旦您了解了后果,您确实想要继续,那么再次 - 遵循 PCI 指南。对于卡号的对称加密,您可能希望使用AES,并制定非常严格的密钥管理策略。
但是,如果您只想存储部分卡号,那么 PCI 声明您只能存储(绝对最大值)前六位和后四位数字。前六位数字是您识别卡类型所需的全部内容。您可能认为必要的最后四位数字有助于防止客户卡号几乎相同的问题。
恕我直言,存储部分卡号(以纯文本形式)是您想要做的,然后将加密、授权和结算的处理外包给第三方网关。支付网关将为您传递给他们的每张卡提供一个唯一的令牌 ID,以便您可以参考一张唯一的卡来执行重新授权或退款等。
您确定要散列这样的敏感信息吗?可能值得阅读这篇文章,以了解尝试将任何敏感信息存储在数据库中的一些陷阱。在您的情况下,情况更糟,因为您希望转换是可逆的。请记住,如果您可以逆转它,那么攻击者也可以。
在开始这门课程之前,请仔细考虑...
也许您最好将此类工作外包给专门从事此工作的人(例如Paypal或Google Checkout等)。