我在我的应用中使用以下代码来加密和解密密码。它工作正常,直到我突然发现它失败了。我记得做的唯一改变是几天前更新我的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
有人可以帮助吗
答案 0 :(得分:0)
找出问题所在。我已经将jdk版本从1.6更新到1.7。那是罪魁祸首。由于我使用的是javax.crypto类,因此任何版本更改都会导致加密略有变化。
答案 1 :(得分:0)
我不是安全专家,但我相信PBEWithSHA256And256BitAES-CBC-BC
是PKCS#12,而您使用PKCS#5获取密钥。也许你需要在Cipher.getInstance()
中提供相同的算法。