加密篇之一 - 对称加密算法 DES,AES,PBE
来源:互联网 发布:excel表格数据对比 编辑:程序博客网 时间:2024/06/04 18:05
数据传输的过程中经常遇到加密的场景,今天来先研究一下对称加密算法。
对称加密算法一般来讲,加密密匙和解密的密匙是一致的,解密就是加密的逆运算。
DES加密
目前来看已经不太安全的加密算法,出现的时间比较早。加密的长度一般是56位。下面举个应用的例子:服务端A和客户端B之间互传数据,B加密,A来解密。首先要有个双方都知道的密匙:
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");keyGenerator.init(56);SecretKey secretKey =keyGenerator.generateKey();byte[]bytesKey =secretKey.getEncoded(); // bytesKey就是生成的一个可用的密匙,通过Arrays.toString(bytesKey)获取有效串
A,B本地通过赋值,定义约定好的密匙
byte[] bytesKey = new byte[]{-124, -46, 121, -47, 52, -70, 8, -32, -3, 114, -80, 82, -88, -94, 115, 109}; // 数字就是有效串
B通过以下方式将要传输的数据加密:
// Key转换DESKeySpec desKeySpec = new DESKeySpec(bytesKey);SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");Key key =factory.generateSecret(desKeySpec);// 加密Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE,key);byte[]result =cipher.doFinal(str.getBytes());// Hex.encodeHexString(result) 得到就是要传输的加密数据字符串
A通过以下方式将收到的数据解密:
// Key转换DESKeySpec desKeySpec = new DESKeySpec(bytesKey);SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");Key key = factory.generateSecret(desKeySpec);// 解密cipher.init(Cipher.DECRYPT_MODE,key);result =cipher.doFinal(result);//new String(result,"UTF-8") 得到解密后的数据
3DES(3重DES)
好处:1.密码长度变长 2.迭代次数变多
AES(建议使用,实际使用可以参考DES的场景)
尚未明确已经被破解,用来替代DES,效率更高。(DES -> 3DES -> N?DES, 是否DES用增加迭代次数来保障加密的可靠性效率太低)
// 生成KEYKeyGenerator keyGenerator = KeyGenerator.getInstance("AES");keyGenerator.init(128);SecretKey secretKey =keyGenerator.generateKey();byte[]bytesKey = secretKey.getEncoded();System.out.println("byteKey:" + Arrays.toString(bytesKey));// KEY转换Key key =new SecretKeySpec(bytesKey, "AES");// 加密Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE,key);byte[]result = cipher.doFinal(str.getBytes());System.out.println("encrypt:" + Hex.encodeHexString(result));// 解密cipher.init(Cipher.DECRYPT_MODE,key);result =cipher.doFinal(result);System.out.println("decrypt:" +new String(result));
PBE (基于口令)
1.口令容易破解,所以要加“盐” 2.密匙 = 盐 + 口令
// 生成盐(加同样的盐,能否返回相同的结果?可以)SecureRandom random = new SecureRandom();byte[]salt = random.generateSeed(8);System.out.println("salt:" + Arrays.toString(salt));// 依据口令生成密匙String password ="nihao";PBEKeySpec pbeKeySpec = new PBEKeySpec(password.toCharArray());SecretKeyFactory factory = SecretKeyFactory.getInstance("PBEWITHMD5andDES");Key key =factory.generateSecret(pbeKeySpec);// 加密 迭代100次PBEParameterSpec pbeParameterSpec = new PBEParameterSpec(salt, 100);Cipher cipher = Cipher.getInstance("PBEWITHMD5andDES");cipher.init(Cipher.ENCRYPT_MODE,key, pbeParameterSpec);byte[]result = cipher.doFinal(str.getBytes());System.out.println("jdk pbe encrypt:" + Hex.encodeHexString(result));// 解密cipher.init(Cipher.DECRYPT_MODE,key, pbeParameterSpec);result =cipher.doFinal(result);System.out.println("jdk pbe decrypt:" +new String(result));
0 0
- 加密篇之一 - 对称加密算法 DES,AES,PBE
- 对称加密算法DES、AES、PBE
- Java加密技术(二)—对称加密算法DES&AES
- Java加密技术(二)对称加密算法DES&AES
- Java加密技术(二)对称加密算法DES&AES
- Java加密技术篇(三)对称加密算法PBE
- 对称加密算法(DES、DESede、AES)
- Java加密技术篇(二)对称加密算法(DES&AES)
- Java 加密解密之对称加密算法PBE
- Java 加密解密之对称加密算法PBE
- Java 加密解密之对称加密算法PBE
- Java 加密解密之对称加密算法PBE
- 对称加密算法DES、3DES和AES
- 对称加密算法DES、3DES和AES
- 对称加密算法DES、3DES和AES
- 对称加密算法DES、3DES和AES
- 对称加密算法-DES,3DES,AES
- 对称加密 des desede aes
- nginx+FastDFS+fastdfs-nginx-module配置分布式文件存储
- 用MediaCodec实现多段视音频的截取与拼接
- 伽马曲线矫正
- MongoDB整合Spring 详细讲解(含代码)
- 使用Linq的泛型功能
- 加密篇之一 - 对称加密算法 DES,AES,PBE
- java之十六篇:探测堆上对象的布局、深入理解对象
- html5 ajax 跨域上传图片
- DataGridView控件机制及使用大全
- 深入消息机制原理 转载老罗
- STL List容器详解
- 【白话经典算法系列之十七】 数组中只出现一次的数
- Java事务处理总结
- 【算法】插入排序法