2

我想知道最好的方法是将加密的信用卡号存储在C#(.net 框架)的 SQL 数据库中。我应该通过使用String/SecureString/Byte Array某种方式手动完成symmetric encryption吗?

我听说对于替代方案(可能是更简单的选择),服务提供商(您与之进行交易)将为您提供key可用于检索交易信息的服务提供商。我不知道如何采用这种方法,但这是更好的选择吗?我想要最安全和最安全的选择。我也想符合PCI 标准

4

2 回答 2

4

如果您要将信用卡号存储在您控制的数据库中,请阅读 PCI DSS:

http://en.wikipedia.org/wiki/Payment_Card_Industry_Data_Security_Standard

为什么要遵守:

https://www.pcisecuritystandards.org/security_standards/why_comply.php

然后阅读如何说服那些要求你在家里存储信用卡的人你给自己带来的伤害世界:

https://security.stackexchange.com/questions/18677/how-to-convince-coworkers-to-not-store-credit-card-numbers-ourselves

于 2013-08-05T19:03:05.373 回答
3

更新:在我写这个答案的三年里,我对 PCI 有了更多的了解,并且发布了一个更新的规范。虽然下面的信息没有,但步骤 1 将您置于“D for Merchants”级别的PCI 范围内,这是最繁重的。

处理此问题的更好方法是不要自己触摸卡数据。您可以使用处理器提供的表格向他们发送数据,或者您只是重定向到他们(如使用 PayPal)。这两个选项都可以使您处于“A”“A-EP”级别,这更容易获得认证。

无论哪种方式,您仍然会收到一个可以安全存储的令牌,因此步骤 3 和 4 仍然适用。


原答案:

我听说作为替代方案(可能是更简单的选择),服务提供商(您与之进行交易)会给您一个可用于检索交易信息的密钥。

这是真实的。基本上,过程是:

  1. 从客户/用户那里获取信用卡信息。存储在代码内变量中(即不是文件、日志或数据库)。
  2. 将信用卡信息发送到您的处理器(例如 Authorize.NET、Payware、Paypal 等)。
  3. 接收包含某种“令牌”的响应。这是您识别此特定事务以供将来与处理器通信的方式。
  4. 令牌存储到您的数据库中。加密会很好,但不是必需的,因为令牌只是引用“事务#12345”,并且本身没有敏感信息。
于 2013-08-05T19:24:20.057 回答