syn1230 2016-07-27 06:37 采纳率: 50%
浏览 2058
已采纳

java 版 8583 35 域 36域 2 磁 3磁加密算法

整个磁道信息(包括二磁道和三磁道)。
加密采用双倍长密钥算法,磁道信息加密密钥TDK通过POS联机交易随机生成密文并上送获得。
D.3 数据源构成
D.3.1 二磁道数据源
二磁道数据(35域)右补字符’F’到16的倍数,再按每8个字节分段作为参与加密的信息,记为TDB2n(n为分段个数)。
D.3.2 三磁道数据源
类似二磁道数据源构造方法,三磁道数据(36域,如果存在)磁道信息块构造方法如下:
三磁道数据(36域)右补字符’F’到16的倍数,再按每8个字节作为参与加密的信息,记为TDB3n(n为分段个数)。
D.4 加密方式
采用双倍长密钥TDK分别对每一部分的TDB2,TDB3进行加密,将密文输出后按照对应位置替换原先的明文数据。
D.5 举例
二磁道数据(37):
1234567890123456789=05082017819991683
右补字符’F’到16的倍数:
1234567890123456789=05082017819991683FFFFFFFFFFF
表示为:
0x12 0x34 0x56 0x78 0x90 0x12 0x34 0x56 0x78 0x9D 0x05 0x08 0x20 0x17 0x81 0x99 0x91 0x68 0x3F 0xFF 0xFF 0xFF 0xFF 0xFF
三磁道数据(104):
991234567890123456789=156000000000000000000378199921600000508000000000000000000000=000000000003=00000000
右补字符’F’到16的倍数:
991234567890123456789=156000000000000000000378199921600000508000000000000000000000=000000000003=00000000FFFFFFFF
表示为:
0x99 0x12 0x34 0x56 0x78 0x90 0x12 0x34 0x56 0x78 0x9D 0x15 0x60 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x03 0x78 0x19 0x99 0x21 0x60 0x00 0x00 0x50 0x80 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xD0 0x00 0x00 0x00 0x00 0x00 0x3D 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF
则TDB21表示为:0x12 0x34 0x56 0x78 0x90 0x12 0x34 0x56
则TDB22表示为:0x78 0x9D 0x05 0x08 0x20 0x17 0x81 0x99
则TDB23表示为:0x91 0x68 0x3F 0xFF 0xFF 0xFF 0xFF 0xFF
则TDB31表示为:0x99 0x12 0x34 0x56 0x78 0x90 0x12 0x34
则TDB32表示为:0x56 0x78 0x9D 0x15 0x60 0x00 0x00 0x00
则TDB33表示为:0x00 0x00 0x00 0x00 0x00 0x03 0x78 0x19
则TDB34表示为:0x99 0x21 0x60 0x00 0x00 0x50 0x80 0x00
则TDB35表示为:0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
则TDB36表示为:0x00 0xD0 0x00 0x00 0x00 0x00 0x00 0x3D
则TDB37表示为:0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF
采用TDK对TDB2n、TDB3n分别进行3DES加密,加密后的磁道信息为:
ENC BLOCK21 = eTDK(TDB21)
ENC BLOCK22 = eTDK(TDB22)
ENC BLOCK23 = eTDK(TDB23)
二磁道密文:BLOCK21 BLOCK22 BLOCK23
ENC BLOCK31 = eTDK(TDB31)
ENC BLOCK32 = eTDK(TDB32)
ENC BLOCK33 = eTDK(TDB33)
ENC BLOCK34 = eTDK(TDB34)
ENC BLOCK35 = eTDK(TDB35)
ENC BLOCK36 = eTDK(TDB36)
ENC BLOCK37 = eTDK(TDB37)
三磁道密文:BLOCK31 BLOCK32 BLOCK33 BLOCK34 BLOCK35 BLOCK36 BLOCK37

  • 写回答

2条回答 默认 最新

  • syn1230 2016-08-08 03:43
    关注

    String trackTxt = new String();
    //String track2Data = bytesToHexString(track2.getBytes()); //二磁道明文十六进制字符串 37位

       // String tmk2 = "107E7902EDDD29882CF74E2EE8CDA0D6";  //下载主密钥获取 
    
        String TDK = "708F8F8B5FDD1C86D8292E9371691F7E";//parseByte2HexStr(TriDes.TriDesEncryption(parseHexStr2Byte(tmk2),parseHexStr2Byte(str)));//32位(16字节)随机磁道密钥
    
        String TDB2 = track2 + "FFFFFFFFFF";  //二磁数据右补F到16的倍数,即48位(24字节)
    
      //  System.out.println(TDB2.length());
    
        String TDB21 = TDB2.substring(0, 16);     //每16位(8字节)截取二磁明文
        String TDB22 = TDB2.substring(16, 32);
        String TDB23 = TDB2.substring(32, 48);
    
        String TDBn[] = {TDB21, TDB22, TDB23};
        String defaultKey[] = {TDK, TDK, TDK};
    
        TDBn = des3Encrypt(defaultKey, TDBn);   //分别对截取的16位(8字节)数据使用随机磁道密钥进行双倍长加密运算
    
    
        trackTxt = TDBn[0] + TDBn[1] + TDBn[2];    //最终二磁密文为三段加密数据依次拼接
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献