8583 mac 字符选择 java 实现_转 8583包 mac算法
DES和MAC加解密算法,已经在多个产品中得到了实际应用,不需任何修改就可使用
本文根据《中国银联直联POS终端规范》的阐述,用C语言编程实现,该算法在实际的商业POS终端中使用。POS终端采用ECB的加密方式,简述如下:
a) 将欲发送给POS中心的消息中,从消息类型(MTI)到63域之间的部分构成MAC
ELEMEMENT BLOCK (MAB)。
b) 对MAB,按每8个字节做异或(不管信息中的字符格式),如果最后不满8个字节,则添加“0X00”。
示例 :
MAB = M1 M2 M3 M4
其中:
M1 = MS11 MS12 MS13 MS14 MS15 MS16 MS17 MS18
M2 = MS21 MS22 MS23 MS24 MS25 MS26 MS27 MS28
M3 = MS31 MS32 MS33 MS34 MS35 MS36 MS37 MS38
M4 = MS41 MS42 MS43 MS44 MS45 MS46 MS47 MS48
按如下规则进行异或运算:
MS11 MS12 MS13 MS14 MS15 MS16 MS17 MS18
XOR) MS21 MS22 MS23 MS24 MS25 MS26 MS27 MS28
---------------------------------------------------
TEMP BLOCK1 = TM11 TM12 TM13 TM14 TM15 TM16 TM17 TM18
然后,进行下一步的运算:
TM11 TM12 TM13 TM14 TM15 TM16 TM17 TM18
XOR) MS31 MS32 MS33 MS34 MS35 MS36 MS37 MS38
---------------------------------------------------
TEMP BLOCK2 = TM21 TM22 TM23 TM24 TM25 TM26 TM27 TM28
再进行下一步的运算:
TM21 TM22 TM23 TM24 TM25 TM26 TM27 TM28
XOR) MS41 MS42 MS43 MS44 MS45 MS46 MS47 MS48
---------------------------------------------------
RESULT BLOCK = TM31 TM32 TM33 TM34 TM35 TM36 TM37 TM38
c) 将异或运算后的最后8个字节(RESULT BLOCK)转换成16 个HEXDECIMAL:
RESULT BLOCK = TM31 TM32 TM33 TM34 TM35 TM36 TM37 TM38
= TM311 TM312 TM321 TM322 TM331 TM332 TM341 TM342 ||
TM351 TM352 TM361 TM362 TM371 TM372 TM381 TM382
d) 取前8 个字节用MAK加密:
ENC BLOCK1 = eMAK(TM311 TM312 TM321 TM322 TM331 TM332 TM341 TM342)
= EN11 EN12 EN13 EN14 EN15 EN16 EN17 EN18
e) 将加密后的结果与后8 个字节异或:
EN11 EN12 EN13 EN14 EN15 EN16 EN17 EN18
XOR) TM351 TM352 TM361 TM362 TM371 TM372 TM381 TM382
------------------------------------------------------------
TEMP BLOCK= TE11 TE12 TE13 TE14 TE15 TE16 TE17 TE18
f) 用异或的结果TEMP BLOCK 再进行一次单倍长密钥算法运算。
ENC BLOCK2 = eMAK(TE11 TE12 TE13 TE14 TE15 TE16 TE17 TE18)
= EN21 EN22 EN23 EN24 EN25 EN26 EN27 EN28
g) 将运算后的结果(ENC BLOCK2)转换成16 个HEXDECIMAL:
ENC BLOCK2 = EN21 EN22 EN23 EN24 EN25 EN26 EN27 EN28
= EM211 EM212 EM221 EM222 EM231 EM232 EM241 EM242 ||
EM251 EM252 EM261 EM262 EM271 EM272 EM281 EM282
示例 :
ENC RESULT= %H84, %H56, %HB1, %HCD, %H5A, %H3F, %H84, %H84
转换成16 个HEXDECIMAL:
“8456B1CD5A3F8484”
h) 取前8个字节作为MAC值。
取”8456B1CD”为MAC值。
Java代码
数据报文:
0x 1234567890ABCDEFABCDEF1234567890 //$body
MAK:2222222222222222
Mac计算:
M1 = 0x 1234567890ABCDEF
M2 = 0x ABCDEF1234567890
M1 Xor M2 结果: 0x B9F9B96AA4FDB57F
扩展成16字节数据:0x 42394639423936414134464442353746
MAK加密前半部分数据结果:0x 9FDE90A34CF73B2E
加密结果与后半部分数据异或,结果:0x DEEAD6E70EC20C68
MAK加密异或结果:0x E267B6E21913D339
扩展成16字节数据:0x45323637423645323139313344333339
Mac:E267B6E2
8字节扩展成16字节时一定要注意大小写,大小写字母的byte ascii是不同的
mac key是签到报文中获得的,需要用主密钥解密成密钥明文
8583 mac 字符选择 java 实现_转 8583包 mac算法相关推荐
- 如何在mac上编写java程序_在mac系统上安装Eclipse,编写java程序
第一步:安装java jre(java 运行环境). 如图所示: 登陆Oralce官网,点击Download选项,找到如图所示界面: 选择Java Runtime Environment(JRE),打 ...
- 选择java版本_新手上路之如何选择Java版本
导读热词 @ 初入Java坑,有那么多版本的Java,想了解清楚自己到底该下什么版本这个问题,首先得了解清楚LTS与非LTS的区别 LTS与非LTS 每一次去官网下载JDK的时候,当你进入到Java ...
- mac 用户 文件夹 权限_这可能是 Mac 共享文件最详细的教程了
如果希望让一台 Mac 访问另一台 Mac 上的文件,就可以使用 Mac 的文件共享功能. 而且不仅是 Mac 之间,甚至用 iPhone.iPad.Windows PC 都可以访问 Mac 的共享文 ...
- mac的rubywoo怎么读_迪奥999和mac ruby woo哪个更好看_有什么区别
迪奥999和mac ruby woo都是经典的色号,它俩是正红色的口红,适合秋冬季节涂抹,但是质地和价格有差距.那么迪奥999和mac ruby woo哪个更好看?迪奥999和mac ruby woo ...
- Mac新手的使用笔记_从Windows到Mac
文章目录 前言 问题集合 环境搭建 1. Python问题 2. MySql问题 3. 路径问题 3.1 如何打开我的电脑 4. Excel建模问题 5. Visual Sudio Code问题 6. ...
- mac 自带 java 环境_在mac上搭建了Java 环境,谨以此文写给自己
最近跳槽算空挡期吧,还是感觉这两年有点浮躁,总有想把自己归零一下,总结一下重新上路. 以前windows上搞过点java,自从入了iOS的坑,mac上还没搞过,现在借着面试facebook的准备时间, ...
- eclipse选择java版本_使用 Eclipse 开发版本选择和下载说明
现在越来越多的人开发使用 IDEA,使用 Eclipse 开发的已经渐渐变少了,这篇就简单介绍下 Eclipse 的版本选择和下载,供目前还在坚守使用 Eclipse 开发的同胞们~ Eclipse ...
- 遗传算法锦标赛选择java实现_多目标遗传算法 ------ NSGA-II (部分源码解析)二元锦标赛选择 tourselect.c...
tourselect.c 文件中共有两个函数: selection (population *old_pop, population *new_pop) individual* tournament ...
- mac 终端 创建java文件_第一个 终端Java程序 (Mac)
新建了一个存放Java工程的文件夹:java_text文件夹 在文件夹下 新建一个 文本文件 内容如下: import java.util.*; public class HelloDate { pu ...
- mac运行ps特别慢_的Photoshop在Mac上运行速度慢|优化Mac上的Photoshop
Photoshop在Mac上運行慢 可能有很多原因,你的Photoshop工作缓慢Mac上.可能性是很高,你的Photoshop作品,因为苹果的性能下降缓慢.如果有大量的垃圾文件或者存在于您的Mac电 ...
最新文章
- ITK:具有写访问权限遍历图像的某个区域
- Python | Pyplot标签
- 2016.01.10 论文扩充、精修、查重
- MySQL复制应用中继日志解析
- Linux硬件硬盘分区知识-总结
- Atitit 获取多媒体mp3 mp4 m4a元数据 G:\桌面安装\paidashi\bin\ffprobe.exe ffprobe -i 1.flv -print_format json -sh
- linux eclipse memory,Linux下安装JDK和Eclipse
- 阿里飞天分布式操作系统
- 从两个角度谈谈:什么是产品视角
- 分布式学习笔记001
- iOS NSDate与NSTimeInterval之间的互转
- 探索 SwiftUI 基本手势
- BUAA_OO 第二单元多线程电梯问题作业总结
- 从成本角度理解盈利和亏损
- net start mysql启动mysql时报错:发生系统错误 2。找不到指定文件
- SEO学习笔记二:在搜索引擎竞价排名环境下,个人网站将何去何从?
- org.apache.flink.client.program.ProgramInvocationException: The main method caused an error
- 决策树算法原理(python)
- 电子元器件篇---MOS管
- ezboot not found 虚拟机安装_如何在 Linux 上安装 Minecraft 服务器
热门文章
- Python3---有关日期的处理---最近自然周最近自然月最近一周最近一月---dateutil模块
- linux学习资料(转帖收藏)
- 《如何有效阅读一本书》:读再多书,不如先学会如何读书
- aptio2018设置u盘启动_2018年U盘装系统bios设置U盘启动方法介绍
- echarts字符云(词云)
- 环洋市场咨询:全球EMS和ODM收入预计2028年达到7978.5亿美元
- 抽签抽奖小程序小工具(jquery+html)只需浏览器运行xlsx.core.min.js
- SpringBoot 使用freemarker 处理文档,找不到文件位置(报错:basePackagePath=““ /* relatively to resourceLoaderClass pkg)
- Synergy Mac和Win键盘映射
- 0013-图像的阈值化-OTSU、固定阈值法、基于局部的阈值化