文章目录

  • 1.软加解密示例
  • 2.知识点
    • ①ANSI X9.8 格式标准
    • ②主密钥,工作密钥加解密
    • 基本概念:
    • 加密种类:
  • 3.密码键盘操作
  • 4.工具

1.软加解密示例

————————————————————————————————————————————------
已知数据:
银行测试主密钥TMK: 1234567890ABCDEFABCDEF0987654321
通过签到接口得到:
工作密钥密文KeyValue :3D66234C49E4296FF9C78D8BACBD6A76
工作密钥校验值CheckValue : 861E83E31FAEBF10

——————————————————————————————————————————————

1.计算PIN_BLOCK,方法为ANSI X9.8 格式标准(带主账号信息)
银行卡密码明文 PIN 123654
账号:6230606601007726888

主账号和PIN 按位异或(32位)
pin: 06123654FFFFFFFFFFFFFFFFFFFFFFFF
PAN: 00000000000000000000660100772688
XOR: 06123654FFFFFFFFFFFF99FEFF88D977

即 PIN_BLOCK 为 06123654FFFFFFFFFFFF99FEFF88D977

跟银行确认好,PIN_BLOCK 是 16位还是32位的。


2.把签到接口的返回值 KeyValue(工作密钥密文)由密文解密为明文,
方法为SM4 ecb模式

解密数据 3D66234C49E4296FF9C78D8BACBD6A76 (工作密钥密文)
解密密钥 1234567890ABCDEFABCDEF0987654321 (测试主密钥)
结果: F351D490994603795C6EBEE8FAEBB481

即 工作密钥明文为 F351D490994603795C6EBEE8FAEBB481

验证 解密是否正确

工作密钥明文: F351D490994603795C6EBEE8FAEBB481
数据:0000000000000000
进行 SM4 ECB 模式加密,所得值的前8个字节若与 checkvalue相同,则 解密正确。

结果:861E83E31FAEBF10 ,与签到接口返回的checkvalue 相同,得 解密正确。


3.用工作密钥明文 对 PIN_BLOCK 进行 SM4 ECB算法加密
加密密钥 :F351D490994603795C6EBEE8FAEBB481 (工作密钥明文)
加密数据:06125055FF88D977 (PIN_BLOCK)
结果:E639B7346D93D4ECE1E991CDCC84936E

即用户密码密文为 E639B7346D93D4ECE1E991CDCC84936E

2.知识点

①ANSI X9.8 格式标准

1. 不带主账号信息a. 概念:对PIN (个人识别码 Personal Identity Number),以第一byte 记录pin的长度,剩余7byte 为用户密码pin,不足8位右补F ,然后转换为BCD码b. BCD码:用4位二进制数来表示1位十进制数中的0~9这10个数码;十六进制转二进制: 把十六进制的每一位转化为4位二进制位BCD码:把十进制的每一位转化为4位二进制位。示例:二进制 0101 0101 十六进制为 0x55 (这是十六进制的55 )BCD码: 55 (这里的55是十进制的55)c. 示例:明文PIN 123456d. Pin block 为 0x06 0x12 0x34 0x56 0xFF 0xFF 0xFF 0xFF
2. 带主账号信息a. 概念:PIN BLOCK 为 PIN 按位 异或 主账号i. PIN: 共8byte; Byte 1 为 PIN 长度;Byte2-Byte8 为PIN明文(每个字符占4个bit,不足8位右补F)ii. 主账号取法:取主账号的右12位(不包括最右边的校验位),不足左补0x00;iii. 异或:xor, 相同为0,不同为1;也成为 半加运算(不带进制的加法运算)  0⊕0=0,1⊕0=1,1⊕1=0b. 示例:1) Pin 123456 -> pin 0x06 0x12 0x34 0x56 0xFF 0xFF 0xFF 0xFF2) 主账号 123456789012345678 -> 6789012345673) Pin block:pin:0x06 0x12 0x34 0x56 0xFF 0xFF 0xFF 0xFF异或:0x00 0x00 0x67 0x89 0x01 0x23 0x45 0x67结果:0x06 0x12 0x53 0xDF 0xFE 0xDC 0xBA 0x98手动计算示例:0x34 -> 0011 01000x67 -> 0110 0111Xor    0101 0011 =0x53

②主密钥,工作密钥加解密

基本概念:

一.主密钥(TMK):由银行科技人员提供,可以采用手工输入(在安全环境下)或密钥母POS注入密码键盘,密码键盘将主密钥写入密钥保护芯片,此芯片具有开机程序自毁功能,能很好的保护银行主密钥的安全性,生产中应保持密码键盘主密钥与银行后台主密钥的一致性。
二.工作密钥(TPK):工作密钥为POS机向银行签到时从银行后台获取,由于签到交易需要通讯,所以需要对工作密钥进行加密传输(签到时银行返回POS的工作密钥是密文),POS终端收到银行返回的报文后,对工作密钥用主密钥进行解密,然后将工作密钥存储在专用的密钥保护芯片里,此过程用密码键盘的专用芯片进行处理,此密钥同样具有开机自毁功能。此密钥专用于计算PIN_BLOCK(对磁卡人输入的密码进行加密)。
三.MAC密钥(TAK):同工作密钥的处理方式一样,POS机向银行签到时从银行后台获取,由于签到交易需要通讯,所以需要对MAC密钥进行加密传输(签到时银行返回POS的MAC密钥是密文),POS终端收到银行返回的报文后,对MAC密钥用主密钥进行解密,然后将MAC密钥存储在专用的密钥保护芯片里,此过程用密码键盘的专用芯片进行处理,此密钥同样具有开机自毁功能。此密钥专用于计算MAC(对数据包生成校验数据)。
四.持卡人密码:用来确定持卡人的身份与信用卡相符,通常是6位数字(明文)。密码应该只有持卡人自己知道。密码要送到银行主机内核对,也就是说在密码的传送过程中不能被其他人获得密码明文,就算是银行人员也不能知道。因此在密码明文输入后就必须一直以密文的形式存在,就算是银行核对密码也应该核对密码密文。

加密种类:

加密种类分为 对称性加密和非对称性加密
对称性加密中又包含分组加密和序列解密,以分组加密为例,又分ECB和CBC 模式
所谓ECB模式,即为ECB(Electronic Code Book) 电码本模式
原理:略

3.密码键盘操作

待更新。

4.工具

附上本文所用智能卡算法工具。
链接:https://pan.baidu.com/s/1brrVVoXgDsiB6fm2s3mDAg
提取码:dvqb

银行卡密码键盘 SM4 ECB模式+ANSI X9.8 格式标准(带主账号信息)PIN 加解密示例相关推荐

  1. ANSI 9.8 , ANSI 9.9和ANSI X9.19

    ANSI 9.8 :加密PIN(账号) (1) ANSI X9.8 Format(不带主账号信息 )       位置                  长度                      ...

  2. ANSI X9.8标准 PIN xor PAN获取PIN BlOCK

    ANSI X9.8标准 PIN xor PAN获取PIN BlOCK 之前看到几篇介绍,把ANSI说成16个字节,真心扯淡,各种误人子弟,真正的ANSI算法其实是8个字节,具体格式如下: (1) AN ...

  3. 国密sm4 ECB、CEC模式探究与在iOS中的应用

    SM4密码算法是一个分组算法.数据分组长度为128比特,密钥长度为128 比特.加密算法采用32 轮迭代结构,每轮使用一个轮密钥. 我们在iOS中实现可用data字节的形式,即秘钥Data为16位,加 ...

  4. ANSI X9.19 MAC算法介绍

    (1)               ANSI X9.19MAC算法只使用双倍长密钥,也就是16字节密钥: (2)               MAC数据按8字节分组,表示为D0-Dn,如果Dn不足8字 ...

  5. 实战篇-OpenSSL之TripleDES加密算法-ECB模式

    本文属于<OpenSSL加密算法库使用系列教程>之一,欢迎查看其它文章. 实战篇-OpenSSL之TripleDES加密算法-ECB模式 一.TripleDES简介 二.ECB模式 1.命 ...

  6. golang 的AES加解密 (CBC/ECB/CFB 模式)

    golang的AES加密和解密的三种模式实现(CBC/ECB/CFB) package mainimport ("bytes""crypto/aes"" ...

  7. Go语言的DES加密(CBC模式, ECB模式) ---- 与java加密互通(转)

    问题场景: 业务需要对接接口, 采用DES加密方式加密, 于是google一下go的DES加密方式, go的DES的默认隐藏了ECB模式, 因为go认为ECB不安全, 所以不建议使用,就隐藏了, 然而 ...

  8. python调用库函数用ecb模式加密图片_AES中ECB模式的加密与解密(Python3.7)

    本文主要解决的问题 本文主要是讲解AES加密算法中的ECB模式的加密解密的Python3.7实现.具体AES加密算法的原理这里不做过多介绍,想了解的可以参考文末的参考链接. 主要解决了两个问题: 在P ...

  9. C++或C 实现AES ECB模式加密解密,支持官方验证

    本文主要介绍 AES 算法的加解密方法.本文使用的语言为 C++,调用的 AES 库为:cryptopp. 1 概述 AES 加密算法的介绍如下(摘自 WikiPedia): 高级加密标准(英语:Ad ...

最新文章

  1. Android 隐式跳转(Activity的隐式跳转)
  2. python opencv imread()函数,关于:灰度图(二维数组图),彩色图(三维数组图)
  3. 盒模型,块状元素,行内元素
  4. 发布|CES 2019 科技趋势(附40页PPT)
  5. 分类算法:决策树(C4.5)
  6. JS数组遍历-forEach()、map()方法
  7. java datastream
  8. iOS开发-16进制颜色转换
  9. Python风格总结:日期操作
  10. ADO.NET数据集的工作原理(DataSet)
  11. VS如何安装.nupkg文件
  12. 在Spring中采取事务处理
  13. 从0开始构建一个k8s集群
  14. html给input添加边框,html input怎么设置虚线边框样式
  15. Xilinx Zynq开发教程
  16. 26、网络丢包怎么办?这些解决办法不得不知
  17. linux--uuid
  18. CTF 每日一题 Day28 异性相吸
  19. SolidWorks安装出现该产品组件的 Windows Installer 没按预期运行
  20. 51单片机:6位数码管动态显示,从600000开始,每0.5秒加1

热门文章

  1. 【Matlab】 遗传算法求解TSP问题
  2. 案例故事丨老虎国际 x TiDB ,降低架构复杂性,保障全球用户安全可靠投资
  3. android 电视设计方案,基于ANDROID4.X的智能电视电脑一体机的设计方案
  4. php 加盐md5,php 结合md5的加密,解密方法
  5. http://blog.csdn.net/kuangfengbuyi/article/details/54091700?%3E
  6. 报告显示:被调研中国企业超85%已从数字转型中获得回报
  7. 90后创业代表张裕平即将出席2016中国IT领袖峰会
  8. 图像中Alpha通道
  9. ScrollView滑动—仿微博主页标题栏渐变悬浮及Fragment实现多个内容页面切换
  10. 微信订阅号内测大改版,这一次更像「今日头条」了