python: 双向部分信用卡存储加密
我想在我的电商网站上存储部分信用卡号码,存储时需要把这些信息加密,这样才能安全地放在数据库里。当用户想要再次使用之前输入的信用卡信息时,就可以解密这些信息,而不需要重新输入一遍。
我使用的是Django框架,所以我需要用Python来解决这个问题。请问有什么好的算法可以解决这个问题呢?
2 个回答
2
你真的确定要以这种方式处理敏感信息吗?也许你可以看看这篇文章,了解一下在数据库中存储敏感信息时可能遇到的一些问题。在你的情况下,情况更糟,因为你希望这个过程是可以逆转的。记住,如果你能逆转,那攻击者也能。
在开始之前,请仔细考虑一下……
也许把这类工作外包给专业的人会更好,比如Paypal或Google Checkout等。
16
在你继续之前,建议你先了解一下PCI-DSS,这个标准规定了你在考虑存储加密的卡号时需要遵循的流程。简单来说,你应该认真考虑把这部分工作外包给第三方支付网关。
如果你在了解了相关后果后,还是决定继续,那么再次提醒你要遵循PCI的指导原则。对于卡号的对称加密,你可能想使用AES,并制定非常严格的密钥管理政策。
不过,如果你只想存储部分卡号,PCI规定你最多只能存储前六位和最后四位数字。前六位数字足以识别卡的类型,而最后四位数字可以帮助防止客户之间卡号过于相似而产生的问题。
在我看来,存储部分卡号(以明文形式)是你想要做的事情,然后将加密、授权和结算的处理外包给第三方网关。支付网关会为你传递给他们的每张卡提供一个唯一的令牌ID,这样你就可以引用这个唯一的卡号进行重新授权或退款等操作。