问题:原来用PB做好的一个C/S软件,其用户的密码是用DES64加密后存入数据库,现需用java做其B/S端,产生问题需解开数据库里存有的加密后的密码返回密码
例子程序:
KeyGenerator keygen = KeyGenerator.getInstance("DES");
   SecretKey deskey = keygen.generateKey();
   Cipher c1 = Cipher.getInstance("DES");
   c1.init(Cipher.DECRYPT_MODE,deskey);
   String myinfo = "DDE57E49A4ACBF7B";
   byte[] cipherByte=c1.doFinal(myinfo.getBytes());
   DES64 des = new DES64(DES64._DES);
   System.out.println(des.byte2hex(cipherByte));其中字符串DDE57E49A4ACBF7B就是原来C/S结构中加密后的字符串
执行后抛出异常:
javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.crypto.provider.SunJCE_h.b(DashoA6275)
at com.sun.crypto.provider.SunJCE_h.b(DashoA6275)
at com.sun.crypto.provider.DESCipher.engineDoFinal(DashoA6275)
at javax.crypto.Cipher.doFinal(DashoA6275)
at com.keem.kit.crypto.DES64.main(DES64.java:135)
请告诉怎么解决问题的方法

解决方案 »

  1.   

    http://www.javayou.com/showlog.jspe?log_id=120
      

  2.   

    感谢liusoft(凤梨罐头)朋友提出的路子,但我还是没能解决,仍然报错误
       byte[] key = "teddygir".getBytes(); 
        byte[] src = "3134".getBytes(); 
         
        
        byte[] des2 = (new String("DDE57E49A4ACBF7B")).getBytes();
        byte[] tt = new byte[8];
        tt[0] = (byte) 0Xdd;
        tt[1] = (byte) 0Xe5;
        tt[2] = (byte) 0X7e;
        tt[3] = (byte) 0X49;
        tt[4] = (byte) 0Xa4;
        tt[5] = (byte) 0Xac;
        tt[6] = (byte) 0Xbf;
        tt[7] = (byte) 0X7B;    byte[] des = encrypt(src, key);
        System.out.println("des" + des.length + "\n");
        //System.out.println(byte2hex(des)); 
        
        System.out.println("before decrypt");
        des = decrypt(tt,key); 
        System.out.println("after decrypt");
         
        System.out.println(byte2hex(des)); 
         
        System.out.println(new String(des)); 
    错误是:javax.crypto.BadPaddingException: Given final block not properly padded
    at com.sun.crypto.provider.SunJCE_h.b(DashoA6275)
    at com.sun.crypto.provider.SunJCE_h.b(DashoA6275)
    at com.sun.crypto.provider.DESCipher.engineDoFinal(DashoA6275)
    at javax.crypto.Cipher.doFinal(DashoA6275)
    at com.keem.kit.crypto.DES64.decrypt(DES64.java:122)
    at com.keem.kit.crypto.DES64.main(DES64.java:192)
    其关键是DDE57E49A4ACBF7B字串如何解密出来的问题
      

  3.   

    Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
    改一下这句试一下。