如何在EMV非接触式跟踪数据中替换CVC3,ATC和不可预测的数字?

时间:2014-09-23 02:53:56

标签: contactless-smartcard emv

我正在尝试在给定CVC3和一堆位置参数的情况下组装正确的轨道数据。但EMV C-2内核书就像你想象的那样晦涩难懂(会不会让某人包含一个例子!?!)。任何人都可以帮助这个例子:

9f62 - pcvc3(t1)  - Position of CVC3 in track1: 0x38 (4-6?)
9f63 - punatc(t1) - Unpredictable Number Track1 Pos: 0x3C6 (2-3 7-10?)
9f64 - natc(t1)   - Digits in track1 ATC: 4
9f65 - pcvc3(t2)  - Position of CVC3 in track2: 0x38 (4-6)
9f66 - punatc(t2) - Unpredictable Number Track2 Pos: 0x3C6 (2-3 7-10?)
9f67 - Digits in track2 ATC: 4

成功生成校验和后:

9f61 - track2 CVC3 - 2EF4
9f60 - track1 CVC3 - 609B
9f36 - ATC - 1E47

假设自由选择数据字段以全0开始,它是如何结束的?规范说明了这一点:

将二进制编码的CVC3(Track2)转换为BCD编码 相应的数字以10表示。复制q的最低有效数字 BCD编码CVC3(Track2)在'自由裁量数据'的合格位置 跟踪2数据。符合条件的位置由q中的非零位表示 PCVC3(磁轨2)。

我读到: CVC3 = 0x609B = 24731(所以复制731?BCD与此有什么关系?或者他们只是说“将731复制为bcd编码到字节数组”?)

1 个答案:

答案 0 :(得分:5)

是的,你是对的,它是相当迟钝的。你是否正确将p值(pCVC3和PUNATC)转换为二进制。 (0011 1000,0011 1100 0110为您的track1 p值)然后右对齐正确的值与自由选择的数据。示例

Bxxxxxxxxxxxxxxxx^ /^14111014010000000000
             ....000000000000000000CCC000
             ....00000000000000AAAA000UU0

所以你说第1曲目的CVC3是609B,这是24,731,因为你PCVC3只要求你设置731的3个字符。你的ATC是1E47,即7,751。你的PUNATC要求4位数,所以你要使用7751. FYI ...如果ATC低于要求的字符你用0填充。你不可预测的数字更加棘手......所以你做了一个4字节的随机数。将其转换为uint(基数为10),然后将8个最重要的字节标记为0.示例。让我们说随机的4个字节是29A6 06AE。在基数10中,即698,746,542。用0标记前8个字符,然后留下000,000,002。你会把02放在你不可预知的数字位置..所以..所有说你的赛道看起来像这样

Bxxxxxxxxxxxxxxxx^ /^14111014017751731020

最后一个字符等于不可预测的数字(数字)数字的长度。这是02 ..所以最后一位是2,制作你的最终曲目数据

%Bxxxxxxxxxxxxxxxx^ /^1411014017751731022;

track2非常相似。祝它好运。我理解你对此感到沮丧。 :)