android DES加密解密 javax.crypto.IllegalBlockSizeException: last blo...


在Android开发中,数据安全是至关重要的,尤其是在存储或传输敏感信息时。DES(Data Encryption Standard)是一种常见的对称加密算法,它简单高效,但安全性相对较低,因为其密钥长度只有56位。本话题将围绕在Android中使用DES加密和解密时遇到的一个常见问题展开:`javax.crypto.IllegalBlockSizeException: last block incomplete in decryption`。 这个异常通常发生在解密过程中,当输入的数据块大小与DES的块大小不匹配时。DES算法要求输入数据必须是8字节的倍数,如果数据不是这种情况,解密时就会抛出这个异常。在Java的`javax.crypto.Cipher`类中,执行解密操作时,如果没有正确处理这个问题,就会导致此错误。 要解决这个问题,开发者需要确保在加密和解密过程中,数据被正确地填充到8字节的倍数。Java的`Cipher`类提供了一个`doFinal()`方法,用于处理最后一块可能不满8字节的数据。在加密前,可以使用`Cipher.PAD_PKCS5`或者`Cipher.PAD_ISO7816`进行填充,而在解密后,需要移除这些填充。 下面是一个简单的DESSUtil.java示例,演示了如何在Android中实现DES加密和解密: ```java import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import java.security.SecureRandom; public class DESUtil { private static final String DES = "DES"; private static final byte[] iv = new byte[8]; // 初始化向量 public static byte[] encrypt(String key, byte[] data) throws Exception { SecureRandom random = new SecureRandom(); DESKeySpec desKey = new DESKeySpec(key.getBytes()); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES); SecretKey securekey = keyFactory.generateSecret(desKey); Cipher cipher = Cipher.getInstance(DES + "/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, securekey, random); return cipher.doFinal(data); } public static byte[] decrypt(String key, byte[] data) throws Exception { DESKeySpec desKey = new DESKeySpec(key.getBytes()); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES); SecretKey securekey = keyFactory.generateSecret(desKey); Cipher cipher = Cipher.getInstance(DES + "/ECB/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, securekey); return cipher.doFinal(data); } } ``` 在这个示例中,我们使用了ECB(Electronic Codebook)模式,这是最基础的DES模式,不使用初始化向量(IV)。然而,为了提高安全性,通常建议使用CBC(Cipher Block Chaining)或其他更安全的模式,并且使用随机生成的IV。同时,注意不要在多个会话间重复使用相同的密钥,这会大大降低加密的安全性。 在实际应用中,还需要考虑以下几点: 1. 由于DES的安全性不足,现在更推荐使用AES(Advanced Encryption Standard),它的密钥长度可选,安全性更高。 2. 为防止密钥泄露,可以使用密钥派生函数(如PBKDF2、bcrypt或scrypt)从用户密码派生密钥,而不是直接存储明文密钥。 3. 除了对称加密,还可以结合非对称加密(如RSA)来保护密钥交换,增加安全性。 理解并妥善处理`javax.crypto.IllegalBlockSizeException`是确保Android应用数据安全的关键一步。通过正确使用填充策略、选择合适的加密模式以及遵循良好的加密实践,可以避免此类异常,从而提供更安全的加密服务。




















- 1


- 粉丝: 388
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 湖南软件公司市场推广策划方案.doc
- 脑机接口技术综述.doc
- 精品文档网络营销策划方案.docx
- 电子商务系统分析.ppt
- S120学习教程第五部分:应用 03 S120通过111报文来实现Basic Position功能
- 互联网+家装电商平台模式构想.ppt
- 2023年网络管理员培训讲义.doc
- 区综合行政执法局2021年度工作总结暨2022年智慧城市建设工作计划.docx
- 基于51单片机的数字频率计课程设计报告书.doc
- 精选计算机类个人自荐信三篇.pdf
- 高校信息化与核心竞争力研究.pptx
- 基于单片机SHT11温湿度传感器电路图于程序.doc
- 神经网络专题知识讲座.pptx
- 2023年9月计算机二级C语言笔试题及答案新版.doc
- 网络营销学院项目手册V2.0.doc
- 网站运营推广计划及方案.docx


