银联公钥加密java实现_【技术贴】银联加密算法 (收藏版)

原标题:【技术贴】银联加密算法 (收藏版)

很多人对银联卡的加密算法感兴趣,毕竟分分钟涉及的都是你的钱的安全,但网上很少人却讲银联标准加密算法。遂写一遍当做是自己的学习笔记,偶尔忘了可以翻翻,同时希望能够帮助到其他人。首先要认识一下cbc算法和ecb算法。cbc算法是链式的,慢,不可并行处理,但更安全,因为每一次加密都是依赖于上一次的结果,同时这也会导致一次错将导致后面的全部错误。ecb算法是分块运算的,可并行,效率高,但不够安全,每一块相同的数据经加密后都是一样的结果。对比了两种算法之后,你应该能猜到一般都会用相对更安全的做法。来看两张图:

69dc7d6df7c20d5fbe21750c39ac19c7.png

53827a34170c80d61811918cd8a9127d.png

银联的mac一般都是采用称做ecb加密算法,但是请注意,银联的ecb算法其实就是cbc算法!是链式的,而且,据我所知的银行都是采用银联标准算法,或者稍微有点变种而已,由此也可以看出银联标准ecb加密算法的重要性。

POS终端采用ECB的加密方式,简述如下:a) 将欲发送给POS中心的消息中,从消息类型(MTI)到63域之间的部分构成MAC ELEMEMENT BLOCK(MAB)。b) M1为8个字节的0,对MAB,按每8个字节做异或(不管信息中的字符格式),如果最后不满8个字节,则添加“0X00”。示例 :M1=0000000000000000MAB = M2 M3 M4 其中:M1 = MS11 MS12 MS13 MS14 MS15 MS16 MS17 MS18M2 = MS21 MS22 MS23 MS24 MS25 MS26 MS27 MS28M3 = MS31 MS32 MS33 MS34 MS35 MS36 MS37 MS38M4 = MS41 MS42 MS43 MS44 MS45 MS46 MS47 MS48

按如下规则进行异或运算:

MS11 MS12 MS13 MS14 MS15 MS16 MS17 MS18XOR) MS21 MS22 MS23 MS24 MS25 MS26 MS27 MS28TEMP BLOCK1 = TM11 TM12 TM13 TM14 TM15 TM16 TM17 TM18

对BLOCK1用MAK加密:

ENC BLOCK1 = eMAK(TM11 TM12 TM13 TM14 TM15 TM16 TM17 TM18)= EN11 EN12 EN13 EN14 EN15 EN16 EN17 EN18

然后,进行下一步的运算:

EN11 EN12 EN13 EN14 EN15 EN16 EN17 EN18XOR) MS31 MS32 MS33 MS34 MS35 MS36 MS37 MS38TEMP BLOCK2 = TM21 TM22 TM23 TM24 TM25 TM26 TM27 TM28

对BLOCK2用MAK加密:

ENC BLOCK2 = eMAK(TM21 TM22 TM23 TM24 TM25 TM26 TM27 TM28)= EN21 EN22 EN23 EN24 EN25 EN26 EN27 EN28

再进行下一步的运算:

EN21 EN22 EN23 EN24 EN25 EN26 EN27 EN28XOR) MS41 MS42 MS43 MS44 MS45 MS46 MS47 MS48RESULT BLOCK = TM31 TM32 TM33 TM34 TM35 TM36 TM37 TM38

对BLOCK用MAK加密:

ENC BLOCK = eMAK(TM31 TM32 TM33 TM34 TM35 TM36 TM37 TM38)= EN31 EN32 EN33 EN34 EN35 EN36 EN37 EN38

c) 将运算后的结果(ENC BLOCK)转换成16 个HEXDECIMAL:

ENC RESULT = EN31 EN32 EN33 EN34 EN35 EN36 EN37 EN38= EM311 EM312 EM321 EM322 EM331 EM332 EM341 EM342 || EM351 EM352 EM361 EM362 EM371 EM372 EM381 EM382示例 :ENC RESULT= %H84, %H56, %HB1, %HCD, %H5A, %H3F, %H84, %H84 转换成16 个HEXDECIMAL:“8456B1CD5A3F8484”作为MAC值取前8个字节作为mac:8456B1CD

例子:

3DES_Key=9BED98891580C3B245FE9EC58BFA8D2AIV=0000000000000000 // 初始向量,其作用是先与Input的前8字节做异或运算,得到的结果才被用于DES加密Input=F4F3E7B3566F6622098750B491EA8D5CECB加密的结果=FE7B6C8A73167964798EBAC2BA4899AACBC加密的结果=FE7B6C8A731679649273F6368EAE9E98返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值