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个回答

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];    //最终二磁密文为三段加密数据依次拼接

你好好好好好好好好好

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问