zoukankan      html  css  js  c++  java
  • 银联加密算法

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

    cbc算法

    银联的mac一般都是採用称做ecb加密算法,可是请注意。银联的ecb算法事实上就是cbc算法!是链式的。并且,据我所知的银行都是採用银联标准算法,或者略微有点变种而已,由此也能够看出银联标准ecb加密算法的重要性。
    POS终端採用ECB的加密方式,简述例如以下:
    a) 将欲发送给POS中心的消息中,从消息类型(MTI)到63域之间的部分构成MAC ELEMEMENT BLOCK
    (MAB)。
    b) M1为8个字节的0,对MAB。按每8个字节做异或(无论信息中的字符格式)。假设最后不满8个字节,则加入“0X00”。
    演示样例 :
    M1=0000000000000000
    MAB = 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

    对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 EN18
    XOR) MS31 MS32 MS33 MS34 MS35 MS36 MS37 MS38
    ——————————————————————————————————TEMP 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 EN28
    XOR) MS41 MS42 MS43 MS44 MS45 MS46 MS47 MS48
    ————————————————————————————————————RESULT 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=9BED98891580C3B245FE9EC58BFA8D2A
    IV=0000000000000000 // 初始向量。其作用是先与Input的前8字节做异或运算,得到的结果才被用于DES加密
    Input=F4F3E7B3566F6622098750B491EA8D5C
    ECB加密的结果=FE7B6C8A73167964798EBAC2BA4899AA
    CBC加密的结果=FE7B6C8A731679649273F6368EAE9E98

  • 相关阅读:
    973. K Closest Points to Origin
    919. Complete Binary Tree Inserter
    993. Cousins in Binary Tree
    20. Valid Parentheses
    141. Linked List Cycle
    912. Sort an Array
    各种排序方法总结
    509. Fibonacci Number
    374. Guess Number Higher or Lower
    238. Product of Array Except Self java solutions
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7375881.html
Copyright © 2011-2022 走看看