对称加解密算法
来源:互联网 发布:adobe flash cc mac 编辑:程序博客网 时间:2024/05/17 07:35
对称加解密和非对称加解密的区别:
1. 对称加解密的加密与解密使用的是同样的密钥,所以速度快,但由于需要将密钥在网络上传输,所以安全性不高。
2. 非对称加解密使用了一对密钥(公钥与私钥),所以安全性高,但加密与解密速度慢。
3. 解决的办法是将对称加解密的密钥使用非对称加解密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后双方可以使用对称加密来进行沟通。
三种对称加解密算法的简单测试:3DES、AES、PBE
一.对称加密算法之3DES
DES是对称加解密算法的标准,因为DES可以被黑客破解,所以之后的项目中不在使用DES。由DES延伸出了3DES,在实际应用中十分广泛。
3DES的好处:1.密钥长度增强 2.迭代次数提高 3.JDK和BC都提供了相应的实现
目前使用比较广泛的,通常用于移动通信系统加密以及基于SSH协议的软件。
1. 对称加解密的加密与解密使用的是同样的密钥,所以速度快,但由于需要将密钥在网络上传输,所以安全性不高。
2. 非对称加解密使用了一对密钥(公钥与私钥),所以安全性高,但加密与解密速度慢。
3. 解决的办法是将对称加解密的密钥使用非对称加解密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后双方可以使用对称加密来进行沟通。
三种对称加解密算法的简单测试:3DES、AES、PBE
一.对称加密算法之3DES
DES是对称加解密算法的标准,因为DES可以被黑客破解,所以之后的项目中不在使用DES。由DES延伸出了3DES,在实际应用中十分广泛。
3DES的好处:1.密钥长度增强 2.迭代次数提高 3.JDK和BC都提供了相应的实现
public class Test3DES {private static int KEY_SIZE=168;private static String KEY_3DES="DESede";public static void main(String[] args) {String data = "3DES加密算法";//1.生成KEYString keyStr = createKey();//2.数据加密String securitData = EnSecuritData(data.getBytes(),Base64.decodeBase64(keyStr));//3.数据解密DeSecuritData(Base64.decodeBase64(securitData),Base64.decodeBase64(keyStr));}public static String createKey(){byte[] byteKey = null;try {KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_3DES);keyGenerator.init(KEY_SIZE);//keyGenerator.init(new SecureRandom()); //根据KEY类型生成相应的默认KEY长度SecretKey secretKey = keyGenerator.generateKey();byteKey = secretKey.getEncoded();System.out.println("生成KEY:"+Base64.encodeBase64String(byteKey));} catch (Exception e) {e.printStackTrace();}return Base64.encodeBase64String(byteKey);}public static String EnSecuritData(byte[] data,byte[] byteKey){String securitData =null;try {//KEY转换Key key = new SecretKeySpec(byteKey, KEY_3DES);//数据加密Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE, key);byte[] byteData = cipher.doFinal(data);securitData = Base64.encodeBase64String(byteData);System.out.println("加密后数据:"+securitData);} catch (Exception e) {e.printStackTrace();}return securitData;}public static void DeSecuritData(byte[] data,byte[] byteKey){try {//KEY转换Key key = new SecretKeySpec(byteKey, KEY_3DES);//数据加密Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");cipher.init(Cipher.DECRYPT_MODE, key);byte[] byteData = cipher.doFinal(data);System.out.println("解密后数据:"+new String(byteData));} catch (Exception e) {e.printStackTrace();}}}二.对称加密算法之AES
目前使用比较广泛的,通常用于移动通信系统加密以及基于SSH协议的软件。
public class TestAES {private static String KEY_AES="AES";public static void main(String[] args) {String data = "AES加密算法";//1.生成KEYString keyStr = createKey();//2.数据加密String securitData = EnSecuritData(data.getBytes(),Base64.decodeBase64(keyStr));//3.数据解密DeSecuritData(Base64.decodeBase64(securitData),Base64.decodeBase64(keyStr));}/** * 生成KEY */public static String createKey(){byte[] byteKey = null;try {KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_AES);keyGenerator.init(new SecureRandom()); //根据KEY类型生成相应的默认KEY长度SecretKey secretKey = keyGenerator.generateKey();byteKey = secretKey.getEncoded();System.out.println("生成KEY:"+Base64.encodeBase64String(byteKey));} catch (Exception e) {e.printStackTrace();}return Base64.encodeBase64String(byteKey);}public static String EnSecuritData(byte[] data,byte[] byteKey){String securitData =null;try {//KEY转换Key key = new SecretKeySpec(byteKey, KEY_AES);//数据加密Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE, key);byte[] byteData = cipher.doFinal(data);securitData = Base64.encodeBase64String(byteData);System.out.println("加密后数据:"+securitData);} catch (Exception e) {e.printStackTrace();}return securitData;}public static String DeSecuritData(byte[] data,byte[] byteKey){String result =null;try {//KEY转换Key key = new SecretKeySpec(byteKey, KEY_AES);//数据加密Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");cipher.init(Cipher.DECRYPT_MODE, key);byte[] byteData = cipher.doFinal(data);result = new String(byteData);System.out.println("解密后数据:"+result);} catch (Exception e) {e.printStackTrace();}return result;}}三.对称加密算法之PBE
PBE算法结合了消息摘要算法和对称加密算法的优点;PBE基于口令加密;是对已有算法的包装;
public class TestPBE {private static String KEYINS="PBEWITHMD5andDES";public static void main(String[] args) {String data = "PBE加解密";try {//初始化盐SecureRandom random = new SecureRandom();byte[] salt = random.generateSeed(8);//口令转换成密钥String pwd = "pwd1234"; //口令PBEKeySpec keySpec = new PBEKeySpec(pwd.toCharArray());SecretKeyFactory factory =SecretKeyFactory.getInstance(KEYINS);Key key = factory.generateSecret(keySpec);//加密PBEParameterSpec parameterSpec = new PBEParameterSpec(salt, 100);Cipher cipher = Cipher.getInstance(KEYINS);cipher.init(Cipher.ENCRYPT_MODE, key, parameterSpec);byte[] securitData = cipher.doFinal(data.getBytes());System.out.println("加密后的数据:"+Base64.encodeBase64String(securitData));//解密cipher.init(Cipher.DECRYPT_MODE, key, parameterSpec);byte[] resultData = cipher.doFinal(securitData);System.out.println("加密后的数据:"+new String(resultData));} catch (Exception e) {e.printStackTrace();}}}
0 0
- 对称加解密算法
- 对称加解密算法
- 非对称加解密基础 - RSA算法
- SM2非对称算法加解密
- RSA 非对称加解密算法
- AES/CBC/PKCS5Padding 对称算法加解密
- 对称加解密函数
- java对称加解密
- C# 对称加解密
- 非对称加解密
- RSA非对称加解密算法的使用
- 对称加解密和非对称加解密
- 对称EDS加解密方法
- 对称EDS加解密方法
- 对称EDS加解密方法
- 非对称加解密原理
- 非对称加解密(RSA)
- java AES对称加解密
- PoEdu_25_字符串处理函数
- Deep Learning 工具 Torch7安装与使用
- 欢迎使用CSDN-markdown编辑器
- 浅谈CSRF攻击方式
- java下载excel文件在firefox中文件名为乱码
- 对称加解密算法
- HDU2089 数位dp入门
- 抽象与可维护性和可拓展性的代码关系
- 解析出错,标准Json格式数据
- cpp学习笔记(四)
- HTML第一章上机练习2 人物介绍
- linux网络环境配置
- linux SWAP分区
- Kafka入门经典教程