【发布时间】:2015-01-13 20:24:36
【问题描述】:
javax.crypto.IllegalBlockSizeException:
Input length must be multiple of 16 when decrypting with padded cipher
请检查代码的重要部分:
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
SecretKey secKey = (SecretKey) keyGen.generateKey();
SecretKey secKey1 = (SecretKey) keyGen1.generateKey();
byte[] stringKey=secKey.getEncoded();
cipher.init(Cipher.ENCRYPT_MODE, secKey1);
byte[] DykeyBytes = cipher.doFinal(stringKey);
StringBuffer sbselect2=new StringBuffer();
sbselect2.append("SELECT keylock FROM ");
sbselect2.append(UserConstants.USER_DETAILS_TABLE_NAME1);
sbselect2.append(" where Username='" + un + "'");
ps2=conn.prepareStatement(sbselect2.toString());
ResultSet rs1 =ps2.executeQuery();
rs1.next();
String Enkey = rs1.getString("keylock");
System.out.println("Encrypted+Encoded key from current user "+Enkey);
rs1.close();
//decrypting the DB stored Key
Cipher cipher2 = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher2.init(Cipher.DECRYPT_MODE, singlekey );
byte[] dynamicKey = Enkey.getBytes("UTF8");
// below is where the error points to at user.dao.UserDao.isRegisteredUser(UserDao.java:313)
byte[] decryptedBytes = cipher2.doFinal(dynamicKey);
Object DeKey = new String(decryptedBytes);//under check
SecretKeySpec key = new SecretKeySpec(decryptedBytes, "AES");
【问题讨论】:
-
让我补充一点:我发现字符串的输入长度是 48,当从数据库中检索回来时它是 58
-
请不要还原提高问题的可读性和格式的编辑。
-
很抱歉这不是故意的。
-
有没有办法解决这个问题
标签: java database encryption cryptography