Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.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# 万事达卡上的CDA认证_C#_Emv_Cda - Fatal编程技术网

C# 万事达卡上的CDA认证

C# 万事达卡上的CDA认证,c#,emv,cda,C#,Emv,Cda,我正在使用万事达信用卡,我对执行CDA身份验证需要采取的确切步骤有疑问 如果我正确理解了这个过程,我应该首先发送generateac命令,然后发送一个外部身份验证 我的生成AC命令如下所示: 80 AE 40 00 42 00 00 00 00 01 00 00 00 00 01 91 00 00 00 00 00 01 02 03 04 12 01 02 02 03 05 06 07 08 00 01 02 12 04 33 00 00 00 00 00 00 00 00 00 00 00 0

我正在使用万事达信用卡,我对执行CDA身份验证需要采取的确切步骤有疑问

如果我正确理解了这个过程,我应该首先发送generateac命令,然后发送一个外部身份验证

我的生成AC命令如下所示:

80 AE 40 00 42 00 00 00 00 01 00 00 00 00 01 91 00 00 00 00 00 01 02 03 04 12 01 02 02 03 05 06 07 08 00 01 02 12 04 33 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

我从卡片上得到的反应如下:

77 29

9F 27 01 80

9F 36 02 00 5C

9F 26 08 AE 7D 66 E4 50 15 D5 A4应用密码

9F 10 12 02 10 A000 00 2A 08 00 01 02 00 00 FF

九万

在下一步中,我将使用以下命令触发“外部身份验证”:

00 82 00 00 AE 7D 66 E4 50 15 D5 A4 02 10 A0 00 00 2A 08 00

之后得到的响应是一个2字节数组[109,0],即6D。这是否意味着我做错了什么


任何建议都将不胜感激。

6D00表示“指令代码不受支持或无效”

77 29 9F 27 01 80当密码信息日期为80时,表示第4位开启。对的这意味着它不是ARQC,而是“需要建议”。也许这就是原因

与其发布原始十六进制转储,不如将消息按组件拆分。

在第一个生成AC命令中,您发送了字节P1=40,试图用TC密码完成事务。但是这张卡决定强迫你使用ARQC密码上网。在卡应答标记0x9F27中,指向标记0x9F26中的密码类型和ARQC密码值

- TLVs:  # EMV, Tag + Length + Value (TLV) series
 - x77:  # EMV, Template, Response Message Format 2
    tag: "77"
    len: "29" #   // 41
  - val:  # Template, Response Message Format 2.
   - x9F27:  # EMV, Cryptogram Information Data (CID)
      tag: "9F27"
      len: "01" #   // 1
      val: "80" # Cryptogram Information Data (CID).
      # 10______ - bits 8-7, ARQC
      # _____000 - bits 3-1 (Reason/Advice/Referral Code), No information given
   - x9F36:  # EMV, Application Transaction Counter (ATC)
      tag: "9F36"
      len: "02" #   // 2
      val: "005C" # Application Transaction Counter (ATC).  // 92
   - x9F26:  # EMV, Cryptogram, Application
      tag: "9F26"
      len: "08" #   // 8
      val: "AE7D66E45015D5A4" # Cryptogram, Application.
   - x9F10:  # EMV, Issuer Application Data (IAD)
      tag: "9F10"
      len: "12" #   // 18
      val: "0210A000002A0800010200000000000000FF" # Issuer Application Data (IAD).
您尝试在不使用正确的颁发者身份验证数据标记0x91的情况下执行外部身份验证。在现实世界中,您的终端应该从授权主机将其联机。在测试环境中,如果您知道ARPC计算所需的算法和一些卡数据、密钥,您可以自己计算该标记值。另外,正如前面所注意到的,您忘了在APDU命令中放入长度为的Lc字节

当在线ARQC密码验证无法进行时,可能会出现以下情况:支持离线的终端、链路断开等。在这种情况下,您的终端应使用TC密码执行第二次生成AC请求,并使用授权响应代码标记0x8A完成离线交易

还要记住,EMV终端内核和您的应用程序可以支持4种CDA模式


请遵循EMV规范中定义的交易流程。

EMV标准在第3部分中涵盖了这一点:

如果ICC响应ARQC,终端将尝试联机,并向发卡机构发送授权请求消息。授权请求消息中包括用于在线卡认证的ARQC

因此,您拥有的卡可能配置为仅“在线”交易,或者测试交易金额超过卡上设置的下限

检查CVM列表,我认为标签8E位于卡返回的2 1记录中。

这应该告诉你什么是最低限度,什么是CVM模式的卡使用


另外-尝试几个不同的测试卡-我发现在测试代码时尝试多个不同的卡很方便。

您要求该卡首先生成TC。 该卡进行风险管理,并返回给您一份ARQC。 ARQC必须由发卡行验证,因此您将ARQC连同所有必要的数据发送给发卡行。 如果终端能够向主机发送数据 { 发卡机构验证ARQC并生成ARPC-标记91。ARC用于生成-标记8A。 ARPC被发送回终端。 终端现在要进行外部身份验证91[len][data]81[len][date] 这将为您提供9000或6300 如果是9000,则要求卡在第二代AC中生成TC } 否则,如果终端无法联机且TAC和IAC默认允许脱机, { 您要求卡在第二代AC中生成TC } 否则,如果终端无法联机且TAC和IAC默认不允许脱机, { 您要求卡在第二代AC中生成AAC } 交易结束


希望这能澄清MasterCard在用户阶段不支持“外部身份验证”命令。这就是为什么卡响应6D00“指令代码不受支持或无效”。您应该使用颁发者身份验证数据执行第二次生成AC

您是否在外部身份验证中遗漏了Lc?即使我在外部身份验证中添加了Lc,响应也是一样的。流程如下,所以我先发送生成AC,然后卡回复为ARQC。所以我需要发送第二个生成AC?不是外部身份验证?在这种情况下,授权响应代码标记0x8A是什么?