摘要:对称加密算法概念加密密钥和解密密钥相同,大部分算法加密揭秘过程互逆。特点算法公开相比非对称加密计算量小加密速度快效率高。
对称加密算法概念
加密密钥和解密密钥相同,大部分算法加密揭秘过程互逆。
特点:算法公开、(相比非对称加密)计算量小、加密速度快、效率高。
弱点:双方都使用同样的密钥,安全性得不到保证。
常用对称加密算法DES(Data Encryption Standard)
3DES(DES加强版,使用3次DES计算,Triple DES,DESede)
AES(Advanced Encryption Standard,3DES加强版)
JDK版DES/3DES/AES算法调用模板 1. 生成密钥//KeyGenerator,密钥生成器 KeyGenerator keyGen = KeyGenerator.getInstance("DES");//算法:DES,DESede,AES //初始化密钥生成器 keyGen.init(56); //各算法密钥长度不同,参见说明 //生成密钥 SecretKey secretKey = keyGen.generateKey(); //生产字节码数据 byte[] key = secretKey.getEncoded();
2.加/解密说明:
1.通过「KeyGenerator.getInstance("DES")」生成密钥,
2.参数为算法名称:分别对应DES、DESede(即3DES)、AES
3.每种算法密钥长度参数:DES(56),3DES(112,168),AES(192,256)
//通过字节码数据key 恢复密钥 SecretKey secretKey = new SecretKeySpec(key, "DES"); //Cipher完成加密/解密工作 Cipher cipher = Cipher.getInstance("DES"); //根据密钥,对Cipher初始化,并选择加密还是解密 cipher.init(Cipher.ENCRYPT_MODE, secretKey); byte[] result = cipher.doFinal(data);
代码示例1.加密或解密都通过cipher.init()设置,参数:ENCRYPT_MODE/DECRYPT_MODE
2.加密或解密都通过cipher.doFinal() 执行,获得byte[]类型结果。
import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; public class DESUtil { /* * 生成密钥 */ public static byte[] initKey() throws Exception{ KeyGenerator keyGen = KeyGenerator.getInstance("DES"); keyGen.init(56); SecretKey secretKey = keyGen.generateKey(); return secretKey.getEncoded(); } /* * DES 加密 */ public static byte[] encrypt(byte[] data, byte[] key) throws Exception{ SecretKey secretKey = new SecretKeySpec(key, "DES"); Cipher cipher = Cipher.getInstance("DES"); cipher.init(Cipher.ENCRYPT_MODE, secretKey); byte[] cipherBytes = cipher.doFinal(data); return cipherBytes; } /* * DES 解密 */ public static byte[] decrypt(byte[] data, byte[] key) throws Exception{ SecretKey secretKey = new SecretKeySpec(key, "DES"); Cipher cipher = Cipher.getInstance("DES"); cipher.init(Cipher.DECRYPT_MODE, secretKey); byte[] plainBytes = cipher.doFinal(data); return plainBytes; } //Test public static void main(String[] args) throws Exception { byte[] desKey = DESUtil.initKey(); System.out.println("DES KEY : " + BytesToHex.fromBytesToHex(desKey)); byte[] desResult = DESUtil.encrypt(DATA.getBytes(), desKey); System.out.println(DATA + ">>>DES 加密结果>>>" + BytesToHex.fromBytesToHex(desResult)); byte[] desPlain = DESUtil.decrypt(desResult, desKey); System.out.println(DATA + ">>>DES 解密结果>>>" + new String(desPlain)); } }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/66239.html
时间:2017年4月11日星期二说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学示例源码:https://github.com/zccodere/s...个人学习源码:https://github.com/zccodere/s... 第一章:对称加密算法DES 1-1 JAVA对称加密算法DES 加密密钥=解密密钥 对称加密算法 初等 DES --3D...
摘要:系列密码学二传送门密码学一基础密码学算法分类消息编码消息摘要类,类,对称密码非对称密码数字签名五元组明文原始信息。非对称密码包提供给,,等非对称加密算法。对称加密算法在分布式网络系统上使用较为困难,主要是因为密钥管理困难,使用成本较高。 前言 最近一场面试,面试官问了我 对称加密与非对称加密的问题,虽然曾经看过一些内容,但是没有系统的整理,所以当被问的时候,脑子里一片空白,没有回答上...
阅读 2084·2023-04-25 18:49
阅读 1811·2019-08-30 14:02
阅读 2601·2019-08-29 17:24
阅读 3294·2019-08-28 18:10
阅读 2894·2019-08-28 18:03
阅读 439·2019-08-26 12:01
阅读 3274·2019-08-26 11:31
阅读 1306·2019-08-26 10:29