信用卡号码应该存储为字符串还是整数?

时间:2011-08-26 02:53:36

标签: c# java

是的......只是想着它......

我是否应该将以我的网站输入的信用卡号码存储为字符串或整数?

我的意思是,它们是由数字组成的,这让我认为它是一个整数...但我不对它们做数学,所以也许一个字符串更合适?

编辑:所以我必须在加密之前存储在某个时刻输入的数字。我可能应该更具体一点 - 这不像是我用明文或任何东西将它们保存在数据库中 - 很高兴看到每个人都尽职尽责:)。

7 个答案:

答案 0 :(得分:33)

都不是。您应该至少将它们保存为使用AES或等效的字节数组,使用行业认可的密钥存储。

Windows通过Data Protection API提供了大量此功能:http://msdn.microsoft.com/en-us/library/ms995355.aspx

为了您自己和客户的利益,请了解加密财务凭证的正确标准,或雇用了解他们的人。

鉴于你的编辑:

C#有一个SecureString类,你应该使用它。我不相信有Java等价物,但我可能错了。

编辑:为了后人......

信用卡详细信息的存储,传输和处理指南由PCI DSS(数据安全标准)定义。任何考虑如何构建管理信用卡数据的解决方案的人都应该在这里阅读,并咨询行业专家:https://www.pcisecuritystandards.org/

答案 1 :(得分:8)

信用卡号码是一个字符串,我不是正面的,但我觉得有些卡片可以从0开始,你不会想要失去任何那些领先的零。此外,你应该加密。如果不是,恶意用户可能能够通过cookie,数据包嗅探器和其他东西来阻止卡号。

答案 2 :(得分:6)

请注意

  • java中的int范围是 -2147483648 ,直到 2147483647 (您可以通过打印Integer.MAX_VALUE和Integer.MIN_VALUE进行检查)
  • 信用卡号码有16位数字。
  • 无需对信用卡号进行计算。
  • 您不应存储信用卡而不加密(以避免号码被盗)。通常加密的结果可以包含字母数字。

基于这些事实,我认为String更适合 (但首先加密)

答案 3 :(得分:5)

您根本不应存储信用卡号码。如果您正在与支付提供商集成,请将信息直接传递给他们,如果您需要稍后收费,他们应该能够提供某种代币。除非您的服务器符合规定,否则您可能违反规则。

答案 4 :(得分:4)

信用卡信息(或任何可能被滥用的个人信息)永远不会以原始形式(字符串,整数等)存储。始终对其进行加密,以便在您的网站被黑客入侵时保护信息。

答案 5 :(得分:2)

由于添加或增加信用卡号码没有意义,因此不适合使用。使用字符串。

答案 6 :(得分:2)

在存储任何信用卡信息之前,请熟悉PCI(支付卡行业)合规性要求。这包括如何存储数字,以及您可以存储的数量。您需要采取许多其他步骤来保护服务器。