对称加密------AES
来源:互联网 发布:淘宝基金如何赎回 编辑:程序博客网 时间:2024/05/28 16:07
概念
AES加密算法即密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。
源码
package cn.silence.encrypt;import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;import java.security.SecureRandom;/** * Created by Silence on 2017/12/19. */public class AESCoder { /** * 定义加密方式为AES */ private final static String KEY_AES = "AES"; //保存的全局种子 private static byte[] SEED = null; /** * 加密数据 * @param data * @param password * @return * @throws Exception */ public static byte[] encrypt(String data, String password) throws Exception { //密钥生成器,参数为算法名称,KeyGenerator包含五种算法:AES (128)、DES (56)、DESede (168)、HmacSHA1和HmacSHA256 KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_AES); //根据SHA1PRNG算法生成伪随机数 SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG"); //设置随机数生成所使用的种子 secureRandom.setSeed(password.getBytes()); //上面是将传入的paasword作为生成密钥的种子,当然也可以像如下这样,生成随机的种子,但是这个种子要跟解密时候的种子一直, //因此这里设置了全局变量,当然这么做并不适合分布式部署的场合,因此慎用// SEED = secureRandom.generateSeed(8);// secureRandom.setSeed(SEED); //初始化密钥生成器 keyGenerator.init(128, secureRandom); //生成对称密钥 SecretKey secretKey = keyGenerator.generateKey(); //获取对称密钥字节数组 byte[] encodeFormat = secretKey.getEncoded(); //根据对称密钥字节数组生成AES密钥 SecretKeySpec secretKeySpec = new SecretKeySpec(encodeFormat, KEY_AES); //对数据加密 Cipher cipher = Cipher.getInstance(KEY_AES); cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec); return cipher.doFinal(data.getBytes("UTF-8")); } public static byte[] decrypt(byte[] data, String password) throws Exception { //密钥生成器,参数为算法名称,KeyGenerator包含五种算法:AES (128)、DES (56)、DESede (168)、HmacSHA1和HmacSHA256 KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_AES); //根据SHA1PRNG算法生成伪随机数 SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG"); //设置随机数生成所使用的种子 secureRandom.setSeed(password.getBytes()); //同加密时对应的描述// secureRandom.setSeed(SEED); //初始化密钥生成器 keyGenerator.init(128, secureRandom); //生成对称密钥 SecretKey secretKey = keyGenerator.generateKey(); //获取对称密钥字节数组 byte[] encodeFormat = secretKey.getEncoded(); //根据对称密钥字节数组生成AES密钥 SecretKeySpec secretKeySpec = new SecretKeySpec(encodeFormat, KEY_AES); //对数据解密 Cipher cipher = Cipher.getInstance(KEY_AES); cipher.init(Cipher.DECRYPT_MODE, secretKeySpec); return cipher.doFinal(data); }}
测试
package cn.silence.encrypt;/** * Created by Silence on 2017/12/19. */public class main { public static void main(String[] args) throws Exception { byte[] result = AESCoder.encrypt("测试", "123"); System.out.println(new String(result)); result = AESCoder.decrypt(result, "123"); System.out.println(new String(result)); }}
总结
AES算法基于排列和置换运算。排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。AES 使用几种不同的方法来执行排列和置换运算。
阅读全文
0 0
- AES对称加密例子
- AES对称加密
- Java-对称加密-AES
- AES对称加密
- AES对称加密
- AES对称加密Util
- 理解AES对称加密
- AES加密对称算法
- 对称加密:AES
- 对称加密------AES
- 对称加密之AES加密
- 加密方式-对称加密(AES)
- javascript 实现AES对称加密
- Java 加密 AES 对称加密算法
- Java 加密 AES 对称加密算法
- Java 加密 AES 对称加密算法
- java实现AES对称加密
- 对称加密 des desede aes
- 数据结构实验之查找二:平衡二叉树
- 一个特效网站
- Java监控工具介绍,VisualVm Yourkit
- c++之public protected private的权限
- 聚集索引与非聚集索引
- 对称加密------AES
- 数组中出现次数超过一半的数字
- postgresql模块——pg_stat_statements详解和安装测试(转载)
- Servlet、JSP及Web容器之间关系的理解
- jquery对象和DOM对象的相互转换
- eclips maven项目ssm框架整合后运行报错Error creating bean with name 'itemServiceImpl': Injection of autowir
- 字符设备驱动
- java dome 导入项目启动不了
- 获取当前时间