问题:原来用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)
请告诉怎么解决问题的方法
例子程序:
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)
请告诉怎么解决问题的方法
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字串如何解密出来的问题
改一下这句试一下。