python:存储加密的双向部分信用卡

时间:2010-02-18 12:12:39

标签: python django encryption credit-card

对于我的ecommece网站,我想将部分信用卡号码存储为字符串,为此,我需要加密信息以存储在数据库中,并在用户想要重新使用之前购买的信用卡信息时解密,而无需输入它一遍又一遍。

我正在使用Django,因此我需要通过Python解决这个问题。什么是解决这个问题的聪明算法?

2 个答案:

答案 0 :(得分:15)

在你走得更远之前,你应该看一下PCI-DSS,它确切地规定你需要采取什么样的流程才能考虑存储加密的卡号。简而言之,您应该认真考虑外包到第三方支付网关。

如果您已经了解了您希望继续进行的后果,那么请再次遵循PCI准则。对于卡号的对称加密,您可能希望使用AES,并制定非常严格的key management policies

但是,如果您只想存储部分卡号,则PCI状态可以存储(绝对最大值)前六位和后四位数。前6位数字是识别卡片类型所需的全部数字。您认为必要的最后四位数字有助于防止客户的卡号接近相同的问题。

恕我线存储部分卡号(纯文本)是您想要做的事情,然后将加密,授权和结算的处理外包给3rd party gateway。支付网关将为您传递给他们的每张卡提供唯一的令牌ID,以便您可以引用唯一的卡来执行重新授权或退款等。

答案 1 :(得分:2)

您是否确定要散列此类敏感信息?可能值得阅读this article以了解尝试将任何敏感信息存储在数据库中的一些陷阱。在你的情况下,它更糟糕,因为你希望转换是可逆的。请记住,如果你可以扭转它,那么攻击者也可以。

在开始这门课程之前要仔细考虑......

也许您最好将此类工作外包给专门从事这项工作的人(例如PaypalGoogle Checkout等)。