android 数据安全中常用的加密算法 AES
来源:互联网 发布:ubuntu 丢失windows 编辑:程序博客网 时间:2024/05/24 06:55
AES:高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
严格地说,AES和Rijndael加密法并不完全一样(虽然在实际应用中二者可以互换),因为Rijndael加密法可以支持更大范围的区块和密钥长度:AES的区块长度固定为128 比特,密钥长度则可以是128,192或256比特;而Rijndael使用的密钥和区块长度可以是32位的整数倍,以128位为下限,256比特为上限。加密过程中使用的密钥是由Rijndael密钥生成方案产生。
因此,在当前阶段来说,AES加密是非常安全的,因此可以用来对我们的敏感数据进行加密,下面给出Android平台下AES加密的代码实现。需要注意的是,在4.2以上的版本中,SecureRandom实例的获取方式发生了变化,因此为了兼容高版本,添加了版本判断。
import android.annotation.SuppressLint;import java.security.SecureRandom;import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;/** * ******************************************************** * AES加密 * ******************************************************** * Created by wang on 16/8/9. */@SuppressLint("TrulyRandom")public class Aes { //密钥 public final static String secretKey = "你的秘钥"; // private final static String HEX = "0123456789ABCDEF"; //android 4.2 private final static int JELLY_BEAN_4_2 = 17; /** * AES加密 * * @param plainText 待加密文本 * @return * @throws Exception */ public static String encrypt(String plainText) throws Exception { return encrypt(secretKey, plainText); } /** * 加密 * * @param secretKey 密钥 * @param plainText 待加密文本 * @return * @throws Exception */ public static String encrypt(String secretKey, String plainText) throws Exception { byte[] rawKey = getRawKey(secretKey.getBytes()); byte[] result = encrypt(rawKey, plainText.getBytes()); return toHex(result); } /** * AES解密 * * @param encryptText 待揭秘文本 * @return * @throws Exception */ public static String decrypt(String encryptText) throws Exception { return decrypt(secretKey, encryptText); } /** * 解密 * * @param secretKey 密钥 * @param encryptText 待揭秘文本 * @return * @throws Exception */ public static String decrypt(String secretKey, String encryptText) throws Exception { byte[] rawKey = getRawKey(secretKey.getBytes()); byte[] enc = toByte(encryptText); byte[] result = decrypt(rawKey, enc); return new String(result); } /** * 获取256位的加密密钥 * * @param seed * @return * @throws Exception */ @SuppressLint("TrulyRandom") private static byte[] getRawKey(byte[] seed) throws Exception { KeyGenerator kgen = KeyGenerator.getInstance("AES"); SecureRandom sr = null; // 在4.2以上版本中,SecureRandom获取方式发生了改变 if (android.os.Build.VERSION.SDK_INT >= JELLY_BEAN_4_2) { sr = SecureRandom.getInstance("SHA1PRNG", "Crypto"); } else { sr = SecureRandom.getInstance("SHA1PRNG"); } sr.setSeed(seed); // 256 bits or 128 bits,192bits kgen.init(256, sr); SecretKey skey = kgen.generateKey(); byte[] raw = skey.getEncoded(); return raw; } /** * 真正的加密过程 * * @param key * @param src * @return * @throws Exception */ private static byte[] encrypt(byte[] key, byte[] src) throws Exception { SecretKeySpec skeySpec = new SecretKeySpec(key, "AES"); Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.ENCRYPT_MODE, skeySpec); byte[] encrypted = cipher.doFinal(src); return encrypted; } /** * 真正的解密过程 * * @param key * @param encrypted * @return * @throws Exception */ private static byte[] decrypt(byte[] key, byte[] encrypted) throws Exception { SecretKeySpec skeySpec = new SecretKeySpec(key, "AES"); Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.DECRYPT_MODE, skeySpec); byte[] decrypted = cipher.doFinal(encrypted); return decrypted; } public static String toHex(String txt) { return toHex(txt.getBytes()); } public static String fromHex(String hex) { return new String(toByte(hex)); } public static byte[] toByte(String hexString) { int len = hexString.length() / 2; byte[] result = new byte[len]; for (int i = 0; i < len; i++) result[i] = Integer.valueOf(hexString.substring(2 * i, 2 * i + 2), 16).byteValue(); return result; } public static String toHex(byte[] buf) { if (buf == null) return ""; StringBuffer result = new StringBuffer(2 * buf.length); for (int i = 0; i < buf.length; i++) { appendHex(result, buf[i]); } return result.toString(); } private static void appendHex(StringBuffer sb, byte b) { sb.append(HEX.charAt((b >> 4) & 0x0f)).append(HEX.charAt(b & 0x0f)); }
0 0
- android 数据安全中常用的加密算法 2 AES
- android 数据安全中常用的加密算法 AES
- android 数据安全中常用的加密算法 1 Base64
- android 数据安全中常用的加密算法 3 RSA
- android 数据安全中常用的加密算法 4 MD5 与3DES
- [安全] -- 使用AES加密算法进行数据加密和解密
- java中常用的数据加密算法
- java中常用的数据加密算法
- android 安全之——文件加密AES加密算法
- android 安全之——文件加密AES加密算法、
- Android加密算法:AES、Base64加密算法
- android AES加密算法示例
- android ---AES加密算法
- Android数据安全之AES加密
- java、android、ios、js数据传递加密算法之AES加密
- 在PHP中使用AES加密算法加密数据
- 在PHP中使用AES加密算法加密数据
- Android 中对称加密算法DES,DESede,AES的加密和解密 的工具类的使用
- C++ 窄字符转换为宽字符
- shell 脚本入门系统教程
- linux移植中Makefile和Kconfig
- 关于数论以及部分其他学习内容总和
- 导入Excel方式汇总--第一种
- android 数据安全中常用的加密算法 AES
- 虚函数表
- Android MVPBuilder第三篇[GreenDao]
- IM模块-缓存图片视频简单工具类
- 点赞+1 效果
- AngularJS常用服务($http、$location、$sce等)
- onSenUI 常用UI组件 笔记
- js的原型链
- LINQ分页和排序,skip和Take 用法