各大加密算法对比(原理、性能、安全、运用)

打印 上一主题 下一主题

主题 905|帖子 905|积分 2715

原理
按加密可逆可以分为:加密可逆算法和加密不可逆算法。加密可逆算法又可以分为:对称加密和非对称加密。
1、加密不可逆算法:一样平常接纳hash算法加密,其原理一样平常是将原文长度补位成64的倍数,接着初始化固定长度的缓存值,颠末循环与分组后的明文举行
与操作、或操作、非操作、异或操作
改变缓存值,末了的缓存值就是密文。该算法加密得到的密文是没有解密算法的,是不可逆的。常见的不可逆算法有:MD5,SHA、SM3。
2、对称加密算法:加密解密密钥相同,明文加密成密文后,密文是可以通过解密恢复原文的,其原理一样平常是将原文分组,颠末
原文位置调换、密钥天生、原文与密钥举行轮函数(异或运算、多项式运算等)处理、分组单元举行字典表置换或位置换
等操作,将明文转化成密文。一样平常解密使用逆函数、返位移或字典表操作可以将密文转化为原文。常见的对称加密算法有:DES、3DES、AES、SM4、RC4、TEA、IDEA。
3、非对称加密算法:加密解密的密钥差别,其原理一样平常是用复杂的数学难题来做公钥私钥。即是获取了公钥,也很难计算出私钥。而且这些构成公钥私钥的数字在特定公式下,能将原文(O)和密文©相互转化。比如RSA的公钥(E,N)和私钥(D,N)都由两个数构成,但能通过公式
C=![](https://img-
blog.csdnimg.cn/img_convert/736969394b437d2ea3e8b53f8e2cf1de.png) mod N以及
O=![](https://img-
blog.csdnimg.cn/img_convert/75dc8ee0e42f4567a750610734900941.png) mod N
相互转化密文和原文。常见的非对称加密算法有:RSA、ECC。
性能
原理分析:非对称接纳原文与缓存值hash函数循环举行与或非等操作,返回值也小,速度应该是最快的。而对称加密需要按位或分组与密钥举行轮函数处理,速度应该慢于不可逆加密算法。非对称加密算法由于计算量巨大,应该是最慢的。
实测:本次实测以Hutool工具的加密算法为准,测试md5、sha-256、des、aes、rsa的性能,分别测试它们在差别数量级原文下的加密速度。测试代码如下:
  1. package com.longqi.bootsecurity;
  2. import cn.hutool.core.util.HexUtil;
  3. import cn.hutool.crypto.SecureUtil;
  4. import cn.hutool.crypto.asymmetric.KeyType;
  5. import cn.hutool.crypto.asymmetric.RSA;
  6. import cn.hutool.crypto.symmetric.AES;
  7. import cn.hutool.crypto.symmetric.DES;
  8. import cn.hutool.crypto.symmetric.SymmetricAlgorithm;
  9. import org.apache.commons.lang3.RandomStringUtils;
  10. import java.security.KeyPair;
  11. import java.security.PrivateKey;
  12. import java.security.PublicKey;
  13. import java.util.ArrayList;
  14. import java.util.List;
  15. /**
  16. * @author LQ
  17. * @projectName boot-integration
  18. * @description: 加密测试
  19. * @date 2023/3/2 20:35
  20. */
  21. public class Application {
  22.     public static void main(String[] args) {
  23.         int len = 100;
  24.         // 准备11个原文,每个算法第一次运行时间不记录,运行时间为后10次的平均值。
  25.         List<String> dataList = new ArrayList<>(16);
  26.         for (int i=0;i<11;i++){
  27.             dataList.add(RandomStringUtils.randomAlphanumeric(len));
  28.         }
  29.         System.out.println("原文长度:"+len);
  30.         System.out.println("原文:"+dataList.get(0));
  31.         // 不可逆加密
  32.         md5(dataList);
  33.         sha256(dataList);
  34.         // 对称加密
  35.         des(dataList);
  36.         aes(dataList);
  37.         // 非对称加密
  38.         rsa(dataList);
  39.     }
  40.     public static void md5(List<String> dataList){
  41.         String encode = SecureUtil.md5(dataList.get(0));
  42.         long startTime = System.nanoTime();
  43.         for(int i=1;i<11;i++){
  44.             SecureUtil.md5(dataList.get(i));
  45.         }
  46.         long endTime = System.nanoTime();
  47.         System.out.println("MD5耗时:"+(endTime-startTime)/10+"ns");
  48.         System.out.println("MD5密文:"+encode);
  49.     }
  50.     public static void sha256(List<String> dataList){
  51.         String encode = SecureUtil.sha256(dataList.get(0));
  52.         long startTime = System.nanoTime();
  53.         for(int i=1;i<11;i++){
  54.             SecureUtil.sha256(dataList.get(i));
  55.         }
  56.         long endTime = System.nanoTime();
  57.         System.out.println("SHA256耗时:"+(endTime-startTime)/10+"ns");
  58.         System.out.println("SHA256密文:"+encode);
  59.     }
  60.     public static void des(List<String> dataList){
  61.         byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.DES.getValue()).getEncoded();
  62.         System.out.println("DES密钥:"+ HexUtil.encodeHexStr(key));
  63.         DES des = SecureUtil.des(key);
  64.         String encode = des.encryptHex(dataList.get(0));
  65.         long startTime = System.nanoTime();
  66.         for(int i=1;i<11;i++){
  67.             des.encryptHex(dataList.get(i));
  68.         }
  69.         long endTime = System.nanoTime();
  70.         System.out.println("DES耗时:"+(endTime-startTime)/10+"ns");
  71.         System.out.println("DES密文:"+encode);
  72.     }
  73.     public static void aes(List<String> dataList){
  74.         byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();
  75.         System.out.println("AES密钥:"+ HexUtil.encodeHexStr(key));
  76.         AES aes = SecureUtil.aes(key);
  77.         String encode = aes.encryptHex(dataList.get(0));
  78.         long startTime = System.nanoTime();
  79.         for(int i=1;i<11;i++){
  80.             aes.encryptHex(dataList.get(i));
  81.         }
  82.         long endTime = System.nanoTime();
  83.         System.out.println("AES耗时:"+(endTime-startTime)/10+"ns");
  84.         System.out.println("AES密文:"+encode);
  85.     }
  86.     public static void rsa(List<String> dataList){
  87.         KeyPair pair = SecureUtil.generateKeyPair("RSA");
  88.         PrivateKey privateKey = pair.getPrivate();
  89.         PublicKey publicKey = pair.getPublic();
  90.         System.out.println("RSA公钥:"+ publicKey.toString());
  91.         System.out.println("RSA私钥:"+ privateKey.toString());
  92.         RSA rsa = SecureUtil.rsa(privateKey.getEncoded(),publicKey.getEncoded());
  93.         String encode = rsa.encryptHex(dataList.get(0), KeyType.PublicKey);
  94.         long startTime = System.nanoTime();
  95.         for(int i=1;i<11;i++){
  96.             rsa.encryptHex(dataList.get(i), KeyType.PublicKey);
  97.         }
  98.         long endTime = System.nanoTime();
  99.         System.out.println("RSA耗时:"+(endTime-startTime)/10+"ns");
  100.         System.out.println("RSA密文:"+encode);
  101.     }
  102. }
复制代码
运行会打印 原文、密文、耗时,密钥,此中的耗时第一次耗时不计算,以各算法后10次平均值打印具体如下:
![](https://img-
blog.csdnimg.cn/img_convert/29513f7325914967e29ff80731639cd2.png)
1、以下是10次加密长度100字符各加密算法的平均耗时(纳秒):
![](https://img-
blog.csdnimg.cn/img_convert/f5eccea5b5ee71103aed98b71c307fbd.png)
加密100长度字符,在处理同批次明文,密钥确定的情况下:AES性能最强、接着是MD5和RSA性能次之,末了是SHA-256与DES性能最差。固然,差距不大,最好与最坏也就3倍差距,最慢需要0.23毫秒。这里的字符空间巨细为:100字节(Byte),即约为0.09765KB,最慢需要0.2毫秒。
2、以下是10次加密长度1000000的字符各加密算法的平均耗时(纳秒):
![](https://img-
blog.csdnimg.cn/img_convert/19dba86116d1cc5cbc27a71c83711f05.png)
可以看出:AES与MD5性能最强,两者相差很小,然后是SHA-256和DES性能次之,末了RSA性能最慢,和别的算法差距明显。这里的字符空间巨细为:1000000字节,即约为976.56KB,最慢需要0.2秒。
3、以下是10次加密长度100000000的字符各加密算法的平均耗时(豪秒),这里时间耗费较长,只统计5次:
![](https://img-
blog.csdnimg.cn/img_convert/fbb052ac0d4a605f9d161cbfe82fbed8.png)
可以看出:AES与MD5性能最强,两者相差很小,然后是SHA-256和DES性能次之,末了RSA性能最慢,和别的算法差距明显。这里的字符空间巨细为:100000000字节,即约为95.37MB,最慢需要24秒。
总结:性能排名:AES、MD5、SHA-256、DES、RSA。具体分析如下:
AES:依附分组团体替换,每次循环处理更多原文数据,即使需要密钥参与运算,还是能和MD5速度处于同一水平线上乃至略胜一点点。
MD5:虽然哈希算法里每次是3个32位字的原文与缓存值举行运算,虽然不需要密钥参与运算,但性能并没有与AES拉开差距,紧张原因是每次处理的原文没有AES多。
SHA-256:和MD5相比,每次处理的字数稳定,缓存值更多,算法更复杂,比MD5慢是正常的。
DES:由于没有分组处理,仅仅是按位替换,每次循环处理的原文数据少,再加上密钥需要参与运算,比不可逆算法慢是正常的。
RSA:根本符合预期,数据量少计算量小,依附最简便的运算,耗费时间少,但数据量一大,运算量大,就被拉开明显差距了。
安全
这里先讨论下各算法根据密文得到原文的加密或解密次数。
MD5:该算法不可逆,破解只能靠穷举法,而且原文越大,时间越长些,密文输出128bit,范围是2的128次方,即最长需要穷举原文加密![](https://img-
blog.csdnimg.cn/img_convert/d7408053e67bce14137995839e348b05.png)次才能破解。
SHA-256:与MD5类似,破解只能靠穷举法,密文输出256bit,范围是2的256次方,即最长需要穷举原文加密![](https://img-
blog.csdnimg.cn/img_convert/5ffc3a1635c77370af6cc477208d445e.png)次才能破解。
DES:该算法密钥只有56位有效,有密文后解密速度恒定,需要穷举密钥解密![](https://img-
blog.csdnimg.cn/img_convert/4d1e46db94b050862440a4602cca0c8b.png)次才能破解。
AES:该算法密钥有128、192、256位,再只有密文的情况下,这三种密钥都得穷举,最长得解密![](https://img-
blog.csdnimg.cn/img_convert/5ffc3a1635c77370af6cc477208d445e.png)才破解。
RSA:该算法密钥有512、1024、2048位,光穷举密钥就得运行![](https://img-
blog.csdnimg.cn/img_convert/2ce753905fab6b2b4b36b04f5f850e96.png)次,再加上该算法加密解密耗时长,破解异常困难。
以上算法安全性是:RSA>SHA-256=>AES>MD5>DES。
运用
MD5:由于速度快,雪崩效应,返回值固定。常用于文件或数据校验。
SHA-256:由于速度比MD5稍慢,雪崩效应,返回值固定,且安全性宏大于MD5,也不担心密钥袒露。可用于文件或数据校验,保存密码。
DES:该算法已淘汰,速度慢,安全性差,如今根本没有运用了。
AES:由于速度快,算法可逆,安全性高(不袒露密钥的话),可用于加密传输信息。
RSA:由于安全性高,算法可逆,有公钥和私钥,但大量数据下加密解密慢,可用于验签、加密传输少量信息。
末了

从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同砚们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门水平而已,本领越强机遇才越多。
因为入门学习阶段知识点比较杂,以是我讲得比较笼统,各人如果有不懂的地方可以找我咨询,我保证知无不言言无不尽,需要相关资料也可以找我要,我的网盘里一大堆资料都在吃灰呢。
干货紧张有:
①1000+CTF历届题库(主流和经典的应该都有了)
②CTF技能文档(最全中文版)
③项目源码(四五十个风趣且经典的练手项目及源码)
④ CTF大赛、web安全、渗透测试方面的视频(适合小白学习)
⑤ 网络安全学习路线图(告别不入流的学习)
⑥ CTF/渗透测试工具镜像文件大全
⑦ 2023密码学/隐身术/PWN技能手册大全
如果你对网络安全入门感爱好,那么你需要的话可以点击这里

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

北冰洋以北

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表