我在我的应用程序中使用以下代码来加密和解密密码。它工作正常,直到突然我注意到它失败了。我记得做的唯一改变是几天前将我的 ADT 和 Eclipse 更新到最新版本。不知道为什么现在失败了。如果我创建新的加密,它会起作用。但是,如果我使用之前生成的任何加密密码并将其传递给下面的代码进行解密,则会出现错误。它在“byte[] plainBytes = cipher.doFinal(cipherBytes);”行中失败了
我的解密代码如下
String keyword = "keyword";
int iterationCount = 1000;
int keyLength = 256;
String[] fields = encryptedPassword.split("]");
byte[] salt = fromBase64(fields[0]);
byte[] cipherBytes = fromBase64(fields[1]);
KeySpec keySpec = new PBEKeySpec(keyword.toCharArray(), salt, iterationCount, keyLength);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWITHSHA256AND256BITAES-CBC-BC");
SecretKey key = keyFactory.generateSecret(keySpec);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
PBEParameterSpec pbeSpec = new PBEParameterSpec(salt, iterationCount);
cipher.init(Cipher.DECRYPT_MODE, key, pbeSpec);
byte[] plainBytes = cipher.doFinal(cipherBytes);
plainStr = new String(plainBytes, "UTF-8").trim();
return plainStr;
我得到的错误如下
java.lang.RuntimeException: javax.crypto.BadPaddingException: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt
任何人都可以在这里帮忙吗