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

Ev.*_*Ev. 9 c# java

是的......只是想一想......

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

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

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

Chr*_*ain 33

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

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

为了您自己和客户的利益,请了解加密财务凭证的适当标准或聘请知道这些凭据的人员.

鉴于您的编辑:

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

编辑:为了后人的缘故......

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

  • 但这不是问题的答案,是吗?即使使用加密,仍然存在加密内的_plaintext_是由二进制整数还是一串ASCII数字组成的问题.(虽然不是一个难题;领先的零是或者有朝一日可能变得重要的最微小的可能性应该确定答案). (7认同)

Ton*_*318 8

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


Rud*_*udy 6

注意

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

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


kmc*_*049 5

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