
最近需要在项目中加密数据,首先想到要使用到AES加密技术。在网上找了很多,都是适合Java工程,在Android上无法正常达到预期的解密。花了两天的时间终于找到了可以在Android上顺利实现加密解密的代码,在这里有必要的记录一下。
简介
对于AES的概念,以下摘自维基百科,它是这样解释的:
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
其余的就不多说了,以下直接进入主题 …
Android中的用法
以下示例是基于Android的,Java不通用
工具类
1 | package com.wt.aes; |
示例调用
1 | package com.wt.aes; |
运行结果,如果是这样:
根据以上log信息可以看出,数据能在设备上成功被加密和解密出来,说明你当前的调试设备版本在Android 7.0(API 24)以下,你依然可以使用以上的方式来加密解密。
Android N 已弃用Crypto
- 如果你在Android系统版本是7.0的设备上运行以上代码,结果是这样的:
根据以上的log信息可以看出,在Android 7.0 新版本 Android SDK 不再支持 Crypto,至于详细可以访问http://android-developers.blogspot.com/2016/06/security-crypto-provider-deprecated-in.html
或者
查看之前我翻译提交的这篇文章。
以下是,修改过后的工具类:
1 | package com.wt.aes; |
以上的工具类中InsecureSHA1PRNGKeyDerivator这个类,可以在示例代码里找到
通过再次调用以上的工具类中的加密解密的方法,就可以在Android 7.0上成功加密解密出数据:
以上是对Anroid 中使用AES及在7.0上使用相关问题,原创不易,如果不足,欢迎指正,谢谢。