Java ECB解密时报错
来源:互联网 发布:js农历日历控件 编辑:程序博客网 时间:2024/05/22 08:24
Exception in thread "main" javax.crypto.BadPaddingException: Given final block not properly paddedat com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)at com.sun.crypto.provider.DESedeCipher.engineDoFinal(DashoA13*..)at javax.crypto.Cipher.doFinal(DashoA13*..)at com.xy.code.Des3.ees3DecodeECB(Des3.java:60)at com.xy.code.Des3.main(Des3.java:17)
拿到加密后的字符串需要将字符串使用base64解码成字节数组,然后将字节数组解密。
import java.security.Key;import javax.crypto.Cipher;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.DESedeKeySpec;import javax.crypto.spec.IvParameterSpec;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;public class Des3 { public static void main(String[] args) throws Exception { byte[] key=new BASE64Decoder().decodeBuffer("YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4"); byte[] keyiv = { 1, 2, 3, 4, 5, 6, 7, 8 }; byte[] data="105|项目删除|.,。、;‘|asddasdas".getBytes("UTF-8"); byte[] a = new BASE64Decoder().decodeBuffer("sJXqpz8mkdAj0F51S690RPTiFPUmSk6A"); System.out.println("ECB加密解密"); byte[] str3 = des3EncodeECB(key, data); byte[] str4 = ees3DecodeECB(key, a); System.out.println(new BASE64Encoder().encode(str3)); System.out.println(new String(str4, "UTF-8")); System.out.println(); System.out.println("CBC加密解密"); byte[] str5 = des3EncodeCBC(key, keyiv, data); byte[] str6 = des3DecodeCBC(key, keyiv, a); System.out.println(new BASE64Encoder().encode(str5)); System.out.println(new String(str6, "UTF-8")); } /** * ECB加密,不要IV * @param key 密钥 * @param data 明文 * @return Base64编码的密文 * @throws Exception */ public static byte[] des3EncodeECB(byte[] key, byte[] data) throws Exception { Key deskey = null; DESedeKeySpec spec = new DESedeKeySpec(key); SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede"); deskey = keyfactory.generateSecret(spec); Cipher cipher = Cipher.getInstance("desede" + "/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, deskey); byte[] bOut = cipher.doFinal(data); return bOut; } /** * ECB解密,不要IV * @param key 密钥 * @param data Base64编码的密文 * @return 明文 * @throws Exception */ public static byte[] ees3DecodeECB(byte[] key, byte[] data) throws Exception { Key deskey = null; DESedeKeySpec spec = new DESedeKeySpec(key); SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede"); deskey = keyfactory.generateSecret(spec); Cipher cipher = Cipher.getInstance("desede" + "/ECB/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, deskey); byte[] bOut = cipher.doFinal(data); return bOut; } /** * CBC加密 * @param key 密钥 * @param keyiv IV * @param data 明文 * @return Base64编码的密文 * @throws Exception */ public static byte[] des3EncodeCBC(byte[] key, byte[] keyiv, byte[] data) throws Exception { Key deskey = null; DESedeKeySpec spec = new DESedeKeySpec(key); SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede"); deskey = keyfactory.generateSecret(spec); Cipher cipher = Cipher.getInstance("desede" + "/CBC/PKCS5Padding"); IvParameterSpec ips = new IvParameterSpec(keyiv); cipher.init(Cipher.ENCRYPT_MODE, deskey, ips); byte[] bOut = cipher.doFinal(data); return bOut; } /** * CBC解密 * @param key 密钥 * @param keyiv IV * @param data Base64编码的密文 * @return 明文 * @throws Exception */ public static byte[] des3DecodeCBC(byte[] key, byte[] keyiv, byte[] data) throws Exception { Key deskey = null; DESedeKeySpec spec = new DESedeKeySpec(key); SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede"); deskey = keyfactory.generateSecret(spec); Cipher cipher = Cipher.getInstance("desede" + "/CBC/PKCS5Padding"); IvParameterSpec ips = new IvParameterSpec(keyiv); cipher.init(Cipher.DECRYPT_MODE, deskey, ips); byte[] bOut = cipher.doFinal(data); return bOut; }}
PS:如果使用ECB加密后,使用CBC解码也会报这个错误
0 0
- Java ECB解密时报错
- java DES ECB模式对称加密解密
- java DES ECB模式对称加密解密
- PHP--JAVA AES(ECB)加密解密
- AES加密解密ECB方式 JAVA服务器加密前端解密
- GO与Java的DES ECB加解密算法互换
- 【转】 java DES ECB模式对称加密解密
- Java利用 AES/ECB/PKCS5Padding 算法加解密
- Java利用 AES/ECB/PKCS5Padding 算法加解密
- (java)RSA/ECB/PKCS1Padding算法加密和解密
- PHP和Java AES 128 ECB 加解密(PKCS5Padding)
- AES Java加密 C#解密 (128-ECB加密模式)
- DES ECB模式JAVA PHP C#实现加密、解密兼容
- java使用AES加密解密 AES-128-ECB加密
- (java)RSA/ECB/PKCS1Padding算法加密和解密
- AES128-ecb加解密
- DES-ECB加密与解密
- AES ECB模式加解密
- 删除历史记录后,兼容性视图列表被清空怎么办?
- Vue中如何使用vue-resource获取端口数据
- 有关RadioGroup的OnCheckedChanged方法执行多次的探讨
- 带页签的 scrollview
- 贝塞尔曲线开发的艺术
- Java ECB解密时报错
- Boost.Interprocess使用手册翻译之五:独立于映射地址的指针:offset_pt (Mapping Address Independent Pointer: offset_ptr)
- Redis配置与异常总结
- UIAutomator定位Android控件的方法(渐进篇)
- winform解析csv文件自动入库并开机自启+邮件告知执行情况
- 接触一门新语言,lua为例
- Java之进程与线程
- 强化市场营销意识,提升军队医院口碑
- BZOJ 2982: combination Lucas定理