Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在SQL数据库中存储加密的信用卡号_C#_.net_Sql_Encryption_Credit Card - Fatal编程技术网

C# 在SQL数据库中存储加密的信用卡号

C# 在SQL数据库中存储加密的信用卡号,c#,.net,sql,encryption,credit-card,C#,.net,Sql,Encryption,Credit Card,我想知道最好的方法是将加密的信用卡号存储在C#(.net framework)的SQL数据库中。我是否应该使用字符串/SecureString/Byte数组和某种对称加密手动执行此操作 我听说另一种选择(可能是更简单的选择),服务提供商(您与之进行交易的供应商)将为您提供一个键,该键可用于检索交易信息。我不知道该怎么做,但这是更好的选择吗?我想要最安全、最安全的选择。我也希望符合PCI标准。如果要将信用卡号存储在您控制的数据库中,请阅读PCI DSS: 您为什么要遵守: 然后阅读如何说服那些

我想知道最好的方法是将加密的信用卡号存储在C#(.net framework)的SQL数据库中。我是否应该使用
字符串/SecureString/Byte数组
和某种
对称加密
手动执行此操作


我听说另一种选择(可能是更简单的选择),服务提供商(您与之进行交易的供应商)将为您提供一个
键,该键可用于检索交易信息。我不知道该怎么做,但这是更好的选择吗?我想要最安全、最安全的选择。我也希望符合PCI标准。

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

您为什么要遵守:

然后阅读如何说服那些要求你将信用卡存储在“你给自己带来伤害的世界”中的人这样做:


更新:在我写这个答案的三年里,我学到了更多关于PCI的知识,并且发布了一个更新的规范。虽然下面的信息没有错,但步骤1将您置于最繁重的级别

更好的处理方法是自己不要触摸卡数据。要么使用处理器提供的表单向他们发送数据,要么重定向到他们(就像PayPal)。这两个选项都可以使您处于或级别,这更容易认证

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


原始答案:

我听说另一种选择(可能是更简单的选择),服务提供商(您与之进行交易的服务提供商)将为您提供一个可用于检索交易信息的密钥

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

  • 从客户/用户处获取信用卡信息。在代码中存储变量(即不是文件、日志或数据库)
  • 将信用卡信息发送到处理程序(如Authorize.NET、Payware、Paypal等)
  • 接收包含某种“令牌”的响应。这是您识别此特定事务的方式,以便将来与处理器通信
  • 标记存储到数据库中。加密很好,但不是必需的,因为令牌只是指“Transaction#12345”,本身没有敏感信息

  • 如果你有其他选择,不要储存信用卡号,即使是加密的。查看authorize.net,一家服务提供商。我断断续续地用了好几年了。存储信用卡信息是一项潜在的巨大责任。@BobKaufman:是的,我担心责任和安全。我刚开始做一个兼职项目,我最关心的是经理们在SQL数据库中存储信用卡号码的方式。authorize.net API和服务可以免费使用吗?为什么有人投票反对这个。。。?如果您可以解释为什么这是一个糟糕的问题?如果您可以访问完整的卡号(在步骤1中暗示),您需要通过PCI合规性进行工作。更好的第一步和第二步是“将支付价值/交易详细信息提交到PCI兼容网关托管的网页”。网关捕获用户卡的详细信息,执行身份验证并返回身份验证结果/令牌id。“我认为这就是他在步骤1和2中的意思(至少我是这么认为的)。@PaulG-这是处理步骤2的一种特定方法。但是,除非您在代码中包含其他人的网关(如PayPal的弹出窗口),否则您必须自己捕获输入。要做到这一点,需要1)一个web浏览器和2)一个具有web网关的处理器(大多数没有)。如果你实际上没有将卡号存储在任何地方,PCI是不相关的——RAM中的一个变量没有保存在任何地方也不算存储它。抱歉@Bobson,但这是我在人们谈论PCI合规性时看到的最常见(也是最令人震惊的)误解。如果存储、处理或传输卡数据,则需要符合pci标准。但是,如果不持久化数据,则更容易完成SAQ(可能是SAQ-C)。看@PaulG现在我想起来了,我不确定你是否提交了那个编辑。我想另一个用户代表你试过了。不管怎么说,这绝对值得发布另一个答案。耶,我正试图向他们解释这一点。“技术主席”并不真正了解安全性、我们正在使用的API或项目的设计。这些链接很有用。我也想把它作为一个正确的答案,但这并没有完全回答这个问题……但这是非常好的信息!非常感谢。