三重DES Java无法正常工作

时间:2017-11-13 14:29:52

标签: java des

我使用此程序代码Programs code full,我无法弄清楚为什么我的Triple DES无法工作。我怎么样和尝试了什么?

  1. 我添加了3key输入(以及keybits的数组),我将用它来加密十六进制并转换它们:

        String keyy1 = new Scanner(System.in).nextLine();
        int keyBitstriple1[] = new int[64];
            for(int i=0 ; i < 14 ; i++) {
            String s = Integer.toBinaryString(Integer.parseInt(keyy1.charAt(i) + "", 16));
                    while(s.length() < 4) {
                        s = "0" + s;
                    }
                    for(int j=0 ; j < 4 ; j++) {
                        keyBitstriple1[(4*i)+j] = Integer.parseInt(s.charAt(j) + "");
                    }
                }    
    
  2. 然后我加密了hexa:

        System.out.println("1st encrypt");
        int outputBits[] = permute(inputBits, keyBitstriple1, false);
        int outputBits2[] = Arrays.copyOf(outputBits, outputBits.length);
        System.out.println("-----------------------------------------------------------");
        System.out.println("2nd enrypt");
        int outputBits3[] = permute(outputBits2, keyBitstriple2, false);
        int outputBits4[] = Arrays.copyOf(outputBits3, outputBits3.length);
        System.out.println("-----------------------------------------------------------");
        System.out.println("3rd enrypt");
        int outputBits5[] = permute(outputBits4, keyBitstriple3, false);
     );
     int outputBits6[] = Arrays.copyOf(outputBits5, outputBits5.length); 
    //a copy of end encrypt
    
  3. 加密完全正确,即使我在线检查DES加密软件的结果也是一样。

    1. 然后我在outputBits6中保存了最终加密,并让用户输入3个密钥来解密加密文本。 与第一步相同。

       String keyy4 = new Scanner(System.in).nextLine();
       String keyy5 = new Scanner(System.in).nextLine();
       String keyy6 = new Scanner(System.in).nextLine();
      
    2. 然后我拿了第一个用户输入的密钥来解密hexa文本。 (outputbits6)

          System.out.println("-----------------------------------------------------------");
          System.out.println("First decrypt");
          int outputBits7[] =  permute(outputBits6, keyBitstriple4, true);
          System.out.println("-----------------------------------------------------------");
          System.out.println("2nd decrypt");
          int outputBits8[] = permute(outputBits7, keyBitstriple5, true);
          System.out.println("-----------------------------------------------------------");
          System.out.println("3rd decrypt");
          int outputBits9[] = permute(outputBits8, keyBitstriple6, true);
      
    3. 每次解密都是错误的,我无法弄清楚原因,但加密是正确的。 MY FULL CODE

      提前致谢。

1 个答案:

答案 0 :(得分:1)

缺少的一件事是3DES加密通常为ede:使用第一个密钥加密,使用第二个密钥解密并使用第三个密钥加密。反向ded用于解密。