我尝试解密从网络服务收到的加密数据。
使用 AES 128
进行加密。
我使用以下代码解密数据:
public static String decrypt(String strToDecrypt)
{
try
{
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding"); //AES/CBC/PKCS7Padding
SecretKeySpec secretKey = new SecretKeySpec(AppConstants.AESEncryptionKey.getBytes("UTF8"), "AES");
int blockSize = cipher.getBlockSize();
cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(new byte[blockSize])); //new IvParameterSpec(new byte[16])
byte decBytes[] = cipher.doFinal(Base64.decode(strToDecrypt, 0));
// byte decBytes[] = cipher.doFinal(Base64.decodeBase64(strToDecrypt));
String decStr = new String(decBytes);
System.out.println("After decryption :" + decStr);
return decStr;
}
catch (Exception e)
{
System.out.println("Exception in decryption : " + e.getMessage());
}
return null;
}
在
cipher.doFinal()
我得到以下异常:
javax.crypto.badpaddingexception pad block corrupted
我浏览了我的帖子,但最终没有找到解决方案。我被困在这里了。
最佳答案
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG","Crypto");
完美运行
注意:此代码仅适用于最高 Android 6 的设备。从 Android 7.0 开始,“Crypto”
provider has been removed ,因此此代码将失败。
关于java - AES128 解密 :javax. crypto.badpaddingexception pad block 已损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23491143/