卡磁道CVV的那些事

一、定义
卡校验值(CVV)提供对磁条内容加密校验以防止非法修改或非法仿制磁条内容的一种算法。加密算法采用美国国家安全部的des算法。
二、卡校验值(CVV)的产生和校验

两个64bit称为CVKA和CVKB的卡校验密钥,用于产生和校验磁道二中的卡校验值CVV。
在生成和使用工作密钥时,注意以下几点:
发卡行不能使用银行密钥(pinkey)作为工作密钥;
每一个发卡行使用不同的工作密钥;
工作密钥应以加密方式存放在主机系统中,假如工作密钥泄露,要求立即更新工作密钥,该发卡行所发行的卡必须重发;

以第一个十六位主账号为例,计算卡校验值的步骤如下: 
主账号:4123456789012345
失效日期:8701
服务代码:101

CVKA
0123456789ABCDEF

CVKB
FEDCBA9876543210

步骤1:抽取数据
source_data_s1
41234567890123458701101

步骤2: 数据块拆分
块1:
source_data_left_s2
4123456789012345
块2:
source_data_right_s2
8701101000000000

步骤3:用CVKA加密对块1  source_data_left_s2

source_data_left_en_s3
B76ADDCE71CCC6BE

步骤4:
4.1 用块2 source_data_right_s2 异或步骤3 source_data_left_en_s3的结果

xor_s4
306BCDDE71CCC6BE

4.2 CVKA对异或结果xor_s4加密

xor_s4_en
A51046A259A4C467

步骤5:
用CVKB对步骤4的结果xor_s4_en解密

xor_s4_en_de_s5
90F6DB02A6F7E621

步骤6:用CVKA对步骤5的结果xor_s4_en_de_s5加密

xor_s4_en_de_s5_en_s6
5B614982E03C97DD

步骤7:对步骤6的结果抽取数字

s6_num7
56149820397

步骤8:对步骤6的结果抽取十六进制字 抽取结果
s6_hex7
BECDD

每个十六进制减去A
s6_hex7_dh
14233

步骤9:将步骤8的结果排列在步骤7的后面

s9_mix_s7_s8
5614982039714233

步骤10:步骤9的结果前三位数字为
CVV
561

你可能感兴趣的:(行业知识笔记)