注册
登录

您现在的位置是:首页 > 学无止境

密码键盘介绍四:PinBlock计算

木木彡82 2019-11-29 21:05:54 0人围观
密码键盘介绍四:PinBlock计算

转载自:https://www.cnblogs.com/peerhuo/p/5622495.html

PinBlock计算最常用的算法介绍:

PinBlock的算法比较多,这里只介绍最常用的算法:

  1. ANSI9.8 算法 (常用默认的算法) -- 带主账号信息
    1.格式化主账号(格式化具体内容见后面算法例子)
    2.格式化PIN(格式化具体内容见后面算法例子)
    3.格式化后的主账号与格式化后的Pin按位异或
    4.用PinKey密钥明文对上述结果加密
    5.得到PinBlock

  2. ANSI9.8 算法 (常用默认的算法) -- 不带主账号信息
    1.格式化PIN(格式化具体内容见后面算法例子)
    2.用PinKey密钥明文对上述结果加密
    3.得到PinBlock

  3. ASCII 格式(少用)
    PIN不与主账号进行运算直接 ASCII 码加密

  4. IBM3624 格式(少用)
    PIN不与主账号进行运算直接 BCD 码加密。

ANSI X9.8 Format(带主帐号信息)的PinBlock的计算(最常用的算法):

例子1:
主账号:123456789012345678(18位主账号信息==银行卡卡号)
明文pin:123456(6位密码信息)

1.格式化主账号
--删除主账号最右的1位校验位
12345678901234567
--取最右边的12位,得到
678901234567
--转换位16进制表示,每个数字占用4个bit
0x678901234567
--左侧补0,变成8字节数据
0x0000678901234567

2.格式化PIN
格式化PIN的规则:
BYTE 1 PIN的长度
BYTE 2 – BYTE 3/4/5/6/7 4--12个PIN(每个PIN占4个BIT)
BYTE 4/5/6/7/8 – BYTE 8 FILLER “F” (每个“F“占4个BIT)

pin(明文):123456
--转换位16进制表示,每个数字占用4个bit
0x123456
--第1字节标明密码长度,这里我们的密码长度是6位数字
0x06123456
--右侧补F,变成8字节数据
0x06123456FFFFFFFF

3.将格式化后的主账号和PIN进行按位异或
0000678901234567
06123456FFFFFFFF
--按位异或,得到结果
061253DFFEDCBA98

4.用PinKey明文对上述结果加密,得到的结果就是PINBLOCK
PinKey(明文): 623F1648EFE60C80
PinBlock: 1BBE711AC126A66C

ANSI X9.8 Format(不带主帐号信息)的PinBlock的计算

  • 格式化PIN

  • 用PinKey密钥明文对上述结果加密

  • 得到PinBlock

例子1:
明文pin:123456

1.格式化PIN
格式化PIN的规则:
BYTE 1 PIN的长度
BYTE 2 – BYTE 3/4/5/6/7 4--12个PIN(每个PIN占4个BIT)
BYTE 4/5/6/7/8 – BYTE 8 FILLER “F” (每个“F“占4个BIT)

pin(明文):123456
--转换位16进制表示,每个数字占用4个bit
0x123456
--第1字节标明密码长度,这里我们的密码长度是6位数字
0x06123456
--右侧补F,变成8字节数据
0x06123456FFFFFFFF

2.用PinKey明文对上述结果加密,得到的结果就是PINBLOCK
PinKey(明文): 623F1648EFE60C80
PinBlock: EF1FE78B08E170A9

如何通过密码键盘来计算PinBlock

通过密码键盘来计算PinBlock,通常包含如下几个步骤(不同厂家的产品顺序会不同)

  1. 要求用户输入Pin信息(通常是6位) --- 启动Pin运算

  2. 激活工作密钥(加密需要使用的密钥PinKey)

  3. 设置主帐号信息

  4. 设置Pin运算使用的算法

  5. 读取Pinblock信息。


文章评论

  • 登录后评论

点击排行