Android AES加解密实战:避免踩坑指南
129 浏览量
更新于2024-08-30
收藏 87KB PDF 举报
本文主要介绍了如何在Android平台上使用AES(Advanced Encryption Standard)加密算法进行数据的加解密操作。作者在实践中遇到了困难,但最终找到了可行的方法,并分享了相关代码和步骤,避免他人重蹈覆辙。
在Android开发中,有时我们需要对敏感数据进行加密处理以保证信息安全。AES是一种广泛使用的对称加密算法,速度快,安全性高。在Android上使用AES进行加解密,主要涉及以下几个关键步骤:
1. **生成密钥**:
在`Aes`工具类中,可以看到使用`KeyGenerator`来生成AES密钥。`KeyGenerator`是Java Cryptography Architecture (JCA)的一部分,用于生成指定算法的密钥。首先通过`KeyGenerator.getInstance("AES")`获取到AES的密钥生成器,然后使用`SecureRandom`生成随机数来初始化密钥,例如`keyGen.init(128, new SecureRandom())`,这里的128表示密钥长度为128位。
2. **创建初始向量(IV)**:
AES的CBC(Cipher Block Chaining)模式需要一个初始向量,确保每次加密的输出不同。在代码中,IV被硬编码为字符串`"qws871bz73msl9x8"`。通常,IV应该是随机生成并随密文一起存储,以便解密时使用。
3. **加密过程**:
加密方法`encrypt()`接收密钥和待加密的明文字符串。明文先转换为字节数组,然后调用`cipher.doFinal()`进行加密,返回加密后的字节数组。加密模式是`AES/CBC/PKCS5Padding`,其中CBC是工作模式,PKCS5Padding是填充方式,确保数据块大小与AES块大小一致。
4. **解析和存储加密结果**:
加密后的字节数组通常需要转换为字符串形式方便存储。这里可能使用了`parseByte2HexStr()`方法将字节转化为16进制字符串。
5. **解密过程**:
解密与加密类似,但需使用`Cipher.DECRYPT_MODE`模式,同时传入密钥和IV。解密后的字节数组再转换回原始字符串。
在实际应用中,需要注意以下几点:
- **密钥管理**:密钥必须安全存储,不能明文保存,可以考虑使用KeyStore或硬件支持的安全存储。
- **兼容性**:不同的Android版本可能需要不同的API调用来获取随机数生成器,如`SecureRandom.getInstanceStrong()`在API 18及以上可用。
- **异常处理**:在上述代码中,没有显示异常处理部分,实际使用时应添加适当的异常捕获,确保程序的健壮性。
Android中使用AES加密数据需要理解加密原理,正确生成和管理密钥,选择合适的加密模式和填充方式,并注意版本兼容性和安全性问题。本文提供的`Aes`工具类提供了一个基础的实现示例,但在实际项目中,还需要根据具体需求进行调整和完善。
2014-06-19 上传
120 浏览量
2015-01-21 上传
2012-07-22 上传
weixin_38741317
- 粉丝: 3
- 资源: 905
最新资源
- 仿7881触屏版游戏交易平台手机wap游戏网站模板.rar_网站开发模板含源代码(css+html+js+图样).zip
- sugoifit-system:这是为小型企业建立业务管理系统的重要项目
- STC12_mcu_ucos_source,遗传算法源码c语言,c语言
- exp-compression-test-experiment-iiith:该实验属于基础工程力学和材料强度实验室的全名
- 用于 MATLAB 的视频适配器设备(网络摄像头)设置:用于 MATLAB 的视频适配器设备设置-matlab开发
- SnapperML:SnapperML是用于机器学习的框架。 它具有许多功能,包括通过docker实例的可伸缩性和可再现性
- Data-Structures-and-Algorithms-Python:理解和实践python中的数据结构和算法所需的所有基本资源和模板代码,很少有小项目来演示其实际应用
- 有用的参考书
- code-learn:框架源码学习笔记
- CPU控制的独立式键盘扫描实验_单片机C语言实例(纯C语言源代码).zip
- FDNPKG:FreeDOS一个启用网络的软件包管理器-开源
- arduinolearn,ios的c语言源码,c语言
- 华硕主板Intel 网卡(I225V 网卡)固件更新 版本1.5,解决老版本固件断网问题。
- 迷失财富:通过创建一个小游戏来学习C ++:迷失财富
- webBasic
- crawler:中大型爬行动物