本篇博客是记录这个开发过程,解密跟后台加密算法有关。这篇算是通用。
代码:
public class AESCBCUtil {
public static String decrypt(String encryptedStr, String key, String iv) {
try {
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes("UTF-8"));
SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7PADDING");
cipher.init(Cipher.DECRYPT_MODE, skeySpec, ivParameterSpec);
byte[] tmpt = Base64.decode(encryptedStr.getBytes("UTF-8"), Base64.DEFAULT);
byte[] original = cipher.doFinal(tmpt);
return new String(original);
} catch (Exception ex) {
ex.printStackTrace();
}
return "";
}
}
客户的协议是没写 Base64 的,但是不用的话会报错:
搜了一下资料,是因为编码方式改变,需要先用Base64解密后,再用DES/AES解密。
参考:解决IllegalBlockSizeException:last block incomplete in decryption异常_码农的自我修养的博客-CSDN博客_illegalblocksize
然后试下,就可以了。网上有很多要第三方包的等,不需要的。
key是16位以上,偏移量iv是16位的。通用 AES/CBC/PKCS7PADDING。
在线加密解密的网址:AES在线解密 AES在线加密 Aes online hex 十六进制密钥 - The X 在线工具
参考: