加密算法
⼗六进制字符串转化为字符算法
例如⼗六进制字符串为: 138CE5B32C0E9126C291E970EA98764C
那么,两位⼗六进制合成⼀个字符:13(hex)->1*16+3=19,那么字符的整数形式则为19
字符转化为⼗六进制字符串
例如字符的整数形式为17->17/16,17%16->11(hex)
主密钥:
主密钥是有三组分量的,⼀个分量为8位,则主密钥的长度为24位
但是⽬前机端只⽀持两组分量,那么密钥的第三个分量则使⽤第⼀个分量的值来合成24位的密钥(名称为3des双倍长)
明⽂分量1 :138CE5B32C0E9126C291E970EA98764C
明⽂分量2 :1FD3C2437F6EE6DCD9383E1A49E9674C
成份1校验值:FA16CB
成份2校验值:906256
合成后校验值:9BAE3E
字符串截取右3位加密后的主密钥: C24CC457EEA2ACB556DB514BFF15AE0B
主密钥明⽂ = 明⽂分量1 异或明⽂分量2
根据上⾯的数据,主密钥明⽂为0C5F27F0536077FA1BA9D76AA3711100
⼯作密钥
Pinkey
Pinkey是⽤来对pinblock进⾏加密的密钥
我们得到的⼀般是pinkey的密⽂,是通过主密钥3des加密⽽成的,3des的加解密可以通过openssl库来实现.
3des加解密函数: DES_ecb3_encrypt
我们通过主密钥明⽂对pinkey密⽂进⾏3des解密,得到pinkey明⽂,然后拿着pinkey明⽂进⾏pinblock的运算Mackey
Mackey是⽤来对macdata进⾏加密的密钥,具体加密过程,参见mac运算章节
我们得到的是mackey的密⽂,是主密钥通过3des加密⽽成, 3des的加解密可以通过openssl库来实现.
3des加解密函数: DES_ecb3_encrypt
我们通过主密钥明⽂对mackey密⽂进⾏3des解密,得到mackey明⽂,然后拿着mackey明⽂进⾏mac运算Pinblock
Pinblock是使⽤卡号和密码进⾏运算得到的⼀串字符.
⾸先压缩密码:
例如密码为123456
压缩成8位字符串
0->6 //密码位数
1->18 //密码第⼀位1*16加上密码第⼆位2 ->1*16+2=18
2->52 //密码第三位3*16加上密码第四位4 ->3*16+4=52
3->86 //密码第五位5*16加上密码第六位6 ->5*16+6=86
4->255 //固定值
5->255 //固定值
6->255 //固定值
7->255 //固定值
得到密码8位串PASSWORD_STR:
6185286255255255255
对帐号进⾏转换:
取帐号右12位(不包括最后⼀位校验位),不⾜12位右补0x00,然后对12位进⾏压缩成8位字符串例如帐号为00123456789012
压缩成8位字符串
0->0 //固定为0
1->0 //固定为0
2->18 //第⼀位1*16加上第⼆位2 ->1*16+2=18
3->52 //第三位3*16加上第四位4 ->3*16+4=52
4->86 //……
5->120 //……
6->144 //……
7->18 //……
得到帐号8位串ACCOUNTNO_STR
0018528612014418
得到pinblock明⽂
对ACCOUNTNO_STR异或PASSWORD_STR
PASSWORD_STR6185286255255255255 ACCOUNTNO_STR0018528612014418 pinblock明⽂61853117186152118254
得到pinblock明⽂: 06123575BA9876FE
得到pinblock密⽂
对pinblock明⽂使⽤pinkey明⽂通过3des加密,最终得到pinblock密⽂
Mac运算
mac是通过mackey明⽂使⽤ANSIX9.19加密⽣成的
ANSIX9.19算法
密钥长度为32位(hex格式)
程序得到macdata串,如果macdata串长度不为8的倍数,则右补0x00,补够8的倍数
设置初始向量E0= x00x00x00x00x00x00x00x00(⼋位0)
把macdata串分成每组8位:D1,D2,D3……DN
使⽤向量跟macdata的⼋位串进⾏异或E0^D1->F-->使⽤密钥左16位进⾏DES加密-->E1 E1^D2----->E2
…….
E(N-1)^DN---->EN
使⽤密钥右16位对EN进⾏DES解密,得到En0
使⽤密钥左16位对EN进⾏DES加密,得到En1
En1为最终的mac
des加解密函数: DES_ecb_encrypt
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论