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");
答案 0 :(得分:0)
嘿伙计们今天我很高兴我尝试了几种类型的逻辑,最后我找到了答案的答案,我相信我是第一个得到它的人。 Hip Hip hurray。我的努力工作得到了回报,从上午10点到下午6点开始工作。
这是过程
密钥生成--- Base64Enocder ---用类似的密钥加密 - Base64Encoded--转换为String - 存储在数据库中---检索字符串--- Base64Decoder ---解密 - Base64Decoder - SecretKeySpec- -walla她是关键
输出: 加密前密钥:javax.crypto.spec.SecretKeySpec@178e7。 base64:UKcvVLp9L51xxHHyLIRrgQ ==。 base64double:wu8CBPMELHgp6WAGGFgHGWjPXn4MRibeZ9IKGRTpjJE =。 加密base64后:wu8CBPMELHgp6WAGGFgHGWjPXn4MRibeZ9IKGRTpjJE =。 解密后base64double:[B @ 1cfe433。 解密后base64:[B @ 18f11d3。 在base64decoder和keyspec之后:javax.crypto.spec.SecretKeySpec@178e7。