解决IllegalBlockSizeException:last block incomplete in decryption异常
来源:互联网 发布:淘宝店铺招牌模板下载 编辑:程序博客网 时间:2024/06/14 07:15
在项目中要用到DES加密,直接使用DES加密会抛出IllegalBlockSizeException:last block incomplete in decryption异常,google后发现因为编码方式的改变,加密的时候使用DES/AES加密后需要使用Base64编码方式再进行一次加密,解密的时候需要先用Base64解密,再用DES/AES相应的方法解密。以下代码为转载,亲测可用:
package ebring.DES;import java.security.Key;import javax.crypto.Cipher;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.DESedeKeySpec;import javax.crypto.spec.IvParameterSpec;import android.util.Base64;import android.util.Log;public class CryptoTools { public static final String keyStr = "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4"; private static byte[] key=Base64.decode(keyStr.getBytes(),Base64.DEFAULT); private static byte[] keyiv = { 1, 2, 3, 4, 5, 6, 7, 8 }; /** * ECB加密,不要IV * @param key 密钥 * @param data 明文 * @return Base64编码的密文 * @throws Exception */ public static byte[] des3EncodeECB(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[] 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"); Log.i("des", "decode init before"); cipher.init(Cipher.DECRYPT_MODE, deskey); Log.i("des", "decode init after" + new String(data,"UTF-8")); byte[] bOut = cipher.doFinal(data); Log.i("des", "decode doFinal after"); return bOut; } /** * CBC加密 * @param key 密钥 * @param keyiv IV * @param data 明文 * @return Base64编码的密文 * @throws Exception */ public static byte[] des3EncodeCBC( 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[] 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; }}
调用:
加密:byte[] temp = CryptoTools.des3EncodeECB(str.getBytes(“UTF-8”));
message = new String(Base64.encode(temp, Base64.DEFAULT),”UTF-8”);
解密:byte[] tmpt;
tmpt = Base64.decode(str.getBytes(“UTF-8”), Base64.DEFAULT);
tmpt = CryptoTools.ees3DecodeECB(tmpt);
str = new String(tmpt,”UTF-8”);
原文地址: 解决IllegalBlockSizeException:last block incomplete in decryption异常
1 0
- 解决IllegalBlockSizeException:last block incomplete in decryption异常
- 解决IllegalBlockSizeException:last block incomplete in decryption异常
- 解决IllegalBlockSizeException:last block incomplete in decryption异常
- javax.crypto.IllegalBlockSizeException: last block incomplete in decryption
- AES128 Decryption异常
- Password decryption in Weblogic
- IllegalBlockSizeException
- File Encryption and Decryption in C#
- 解决 has incomplete type
- Java 3DES加密 javax.crypto.IllegalBlockSizeException: data not block size aligned
- Last log in
- last day in NI
- ios block探究及block野指针异常报错分析解决
- java.sql.SQLException: 对只转发结果集的无效操作: last异常解决
- [Java] 解决异常:“The last packet sent successfully to the server was 0 milliseconds ago.
- switch case in protected scope 异常解决
- Unknown column '*' in 'field list' 异常解决
- switch case in protected scope 异常解决
- ajax 笔记--二级联动
- Git 常用命令详解(二)
- 代码记录--简单的正则表达式判断[手机,邮箱,CVV码]
- 基本的CRUD(创建、读取、更新、删除)
- Android命令使用--am
- 解决IllegalBlockSizeException:last block incomplete in decryption异常
- android.util.AndroidRuntimeException: requestFeature() must be called before adding content
- mysql基础知识
- 微软100题(2) min函数栈
- 《Java程序设计》第二次作业:MySQL数据库及Java操作MySQL数据库 之一
- Error: Can't access JTAG chain问题解决方法
- maven+ssh+JPA配置文件
- Numpy常用函数
- Android之boost编译