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条)

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料