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

这篇具有很好参考价值的文章主要介绍了各大加密算法对比(原理、性能、安全、运用)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原理

按加密可逆可以分为:加密可逆算法和加密不可逆算法。加密可逆算法又可以分为:对称加密和非对称加密。

1、加密不可逆算法:一般采用hash算法加密,其原理一般是将原文长度补位成64的倍数,接着初始化固定长度的缓存值,经过循环与分组后的明文进行 与操作、或操作、非操作、异或操作 改变缓存值,最后的缓存值就是密文。该算法加密得到的密文是没有解密算法的,是不可逆的。常见的不可逆算法有:MD5,SHA、SM3。

2、对称加密算法:加密解密密钥相同,明文加密成密文后,密文是可以通过解密恢复原文的,其原理一般是将原文分组,经过 原文位置调换、密钥生成、原文与密钥进行轮函数(异或运算、多项式运算等)处理、分组单元进行字典表置换或位置换 等操作,将明文转化成密文。一般解密使用逆函数、返位移或字典表操作可以将密文转化为原文。常见的对称加密算法有:DES、3DES、AES、SM4、RC4、TEA、IDEA。

3、非对称加密算法:加密解密的密钥不同,其原理一般是用复杂的数学难题来做公钥私钥。即是获取了公钥,也很难计算出私钥。而且这些组成公钥私钥的数字在特定公式下,能将原文(O)和密文(C)相互转化。比如RSA的公钥(E,N)和私钥(D,N)都由两个数组成,但能通过公式 C=各大加密算法对比(原理、性能、安全、运用) mod N以及 O=各大加密算法对比(原理、性能、安全、运用) mod N 相互转化密文和原文。常见的非对称加密算法有:RSA、ECC。

性能

原理分析:非对称采用原文与缓存值hash函数循环进行与或非等操作,返回值也小,速度应该是最快的。而对称加密需要按位或分组与密钥进行轮函数处理,速度应该慢于不可逆加密算法。非对称加密算法由于计算量巨大,应该是最慢的。

实测:本次实测以Hutool工具的加密算法为准,测试md5、sha-256、des、aes、rsa的性能,分别测试它们在不同数量级原文下的加密速度。测试代码如下:

package com.longqi.bootsecurity;

import cn.hutool.core.util.HexUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.RSA;
import cn.hutool.crypto.symmetric.AES;
import cn.hutool.crypto.symmetric.DES;
import cn.hutool.crypto.symmetric.SymmetricAlgorithm;
import org.apache.commons.lang3.RandomStringUtils;

import java.security.KeyPair;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.util.ArrayList;
import java.util.List;

/**
 * @author LQ
 * @projectName boot-integration
 * @description: 加密测试
 * @date 2023/3/2 20:35
 */
public class Application {

    public static void main(String[] args) {
        int len = 100;
        // 准备11个原文,每个算法第一次运行时间不记录,运行时间为后10次的平均值。
        List<String> dataList = new ArrayList<>(16);
        for (int i=0;i<11;i++){
            dataList.add(RandomStringUtils.randomAlphanumeric(len));
        }
        System.out.println("原文长度:"+len);
        System.out.println("原文:"+dataList.get(0));
        // 不可逆加密
        md5(dataList);
        sha256(dataList);
        // 对称加密
        des(dataList);
        aes(dataList);
        // 非对称加密
        rsa(dataList);
    }


    public static void md5(List<String> dataList){
        String encode = SecureUtil.md5(dataList.get(0));
        long startTime = System.nanoTime();
        for(int i=1;i<11;i++){
            SecureUtil.md5(dataList.get(i));
        }
        long endTime = System.nanoTime();
        System.out.println("MD5耗时:"+(endTime-startTime)/10+"ns");
        System.out.println("MD5密文:"+encode);
    }

    public static void sha256(List<String> dataList){
        String encode = SecureUtil.sha256(dataList.get(0));
        long startTime = System.nanoTime();
        for(int i=1;i<11;i++){
            SecureUtil.sha256(dataList.get(i));
        }
        long endTime = System.nanoTime();
        System.out.println("SHA256耗时:"+(endTime-startTime)/10+"ns");
        System.out.println("SHA256密文:"+encode);
    }

    public static void des(List<String> dataList){
        byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.DES.getValue()).getEncoded();
        System.out.println("DES密钥:"+ HexUtil.encodeHexStr(key));
        DES des = SecureUtil.des(key);
        String encode = des.encryptHex(dataList.get(0));
        long startTime = System.nanoTime();
        for(int i=1;i<11;i++){
            des.encryptHex(dataList.get(i));
        }
        long endTime = System.nanoTime();
        System.out.println("DES耗时:"+(endTime-startTime)/10+"ns");
        System.out.println("DES密文:"+encode);
    }

    public static void aes(List<String> dataList){
        byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();
        System.out.println("AES密钥:"+ HexUtil.encodeHexStr(key));
        AES aes = SecureUtil.aes(key);
        String encode = aes.encryptHex(dataList.get(0));
        long startTime = System.nanoTime();
        for(int i=1;i<11;i++){
            aes.encryptHex(dataList.get(i));
        }
        long endTime = System.nanoTime();
        System.out.println("AES耗时:"+(endTime-startTime)/10+"ns");
        System.out.println("AES密文:"+encode);
    }

    public static void rsa(List<String> dataList){
        KeyPair pair = SecureUtil.generateKeyPair("RSA");
        PrivateKey privateKey = pair.getPrivate();
        PublicKey publicKey = pair.getPublic();
        System.out.println("RSA公钥:"+ publicKey.toString());
        System.out.println("RSA私钥:"+ privateKey.toString());
        RSA rsa = SecureUtil.rsa(privateKey.getEncoded(),publicKey.getEncoded());
        String encode = rsa.encryptHex(dataList.get(0), KeyType.PublicKey);
        long startTime = System.nanoTime();
        for(int i=1;i<11;i++){
            rsa.encryptHex(dataList.get(i), KeyType.PublicKey);
        }
        long endTime = System.nanoTime();
        System.out.println("RSA耗时:"+(endTime-startTime)/10+"ns");
        System.out.println("RSA密文:"+encode);
    }


}

运行会打印 原文、密文、耗时,密钥,其中的耗时第一次耗时不计算,以各算法后10次平均值打印具体如下:

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

1、以下是10次加密长度100字符各加密算法的平均耗时(纳秒):

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

加密100长度字符,在处理同批次明文,密钥确定的情况下:AES性能最强、接着是MD5和RSA性能次之,最后是SHA-256与DES性能最差。当然,差距不大,最好与最坏也就3倍差距,最慢需要0.23毫秒。这里的字符空间大小为:100字节(Byte),即约为0.09765KB,最慢需要0.2毫秒。

2、以下是10次加密长度1000000的字符各加密算法的平均耗时(纳秒):

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

可以看出:AES与MD5性能最强,两者相差很小,然后是SHA-256和DES性能次之,最后RSA性能最慢,和别的算法差距明显。这里的字符空间大小为:1000000字节,即约为976.56KB,最慢需要0.2秒。

3、以下是10次加密长度100000000的字符各加密算法的平均耗时(豪秒),这里时间耗费较长,只统计5次:

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

可以看出: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次方,即最长需要穷举原文加密各大加密算法对比(原理、性能、安全、运用)次才能破解。

SHA-256:与MD5类似,破解只能靠穷举法,密文输出256bit,范围是2的256次方,即最长需要穷举原文加密各大加密算法对比(原理、性能、安全、运用)次才能破解。

DES:该算法密钥只有56位有效,有密文后解密速度恒定,需要穷举密钥解密各大加密算法对比(原理、性能、安全、运用)次才能破解。

AES:该算法密钥有128、192、256位,再只有密文的情况下,这三种密钥都得穷举,最长得解密各大加密算法对比(原理、性能、安全、运用)才破解。

RSA:该算法密钥有512、1024、2048位,光穷举密钥就得运行各大加密算法对比(原理、性能、安全、运用)次,再加上该算法加密解密耗时长,破解异常困难。

以上算法安全性是:RSA>SHA-256=>AES>MD5>DES。

运用

MD5:由于速度快,雪崩效应,返回值固定。常用于文件或数据校验。

SHA-256:由于速度比MD5稍慢,雪崩效应,返回值固定,且安全性远大于MD5,也不担心密钥暴露。可用于文件或数据校验,保存密码。

DES:该算法已淘汰,速度慢,安全性差,现在基本没有运用了。

AES:由于速度快,算法可逆,安全性高(不暴露密钥的话),可用于加密传输信息。

RSA:由于安全性高,算法可逆,有公钥和私钥,但大量数据下加密解密慢,可用于验签、加密传输少量信息。文章来源地址https://www.toymoban.com/news/detail-413896.html

到了这里,关于各大加密算法对比(原理、性能、安全、运用)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 全面分析低代码平台:各大热门产品详细对比

    低代码平台彻底改变了企业构建和部署定制应用程序的方式。它们提供了一种用最少的代码,更快、更高效地开发软件的方法。使得公司在加快创新的同时节省了时间和资源。对于一些想进行数字化转型,选择低代码平台入门的中小企业来讲,应该选择哪个产品呢?在这篇文

    2024年02月05日
    浏览(46)
  • Java class 文件安全加密工具对比与ClassFinal实战

    相信不少的同学开发的软件都是用户商业化,对于这些商业运营的项目很多都会直接部署在客户方,这样就可能会导致项目源码泄露。当然,作为Java语言的搬砖人打的jar包更是如此,可以直接通过GUI反编译轻而易举拿到源码。那么,有没有对我们class文件加密和代码混淆的实

    2024年02月05日
    浏览(43)
  • Stable Diffusion各大模型相同参数出图效果对比

    相同提示词,相同参数:(a cute girl) with brown hair, half body.A masterpiece, best quality,lora:blindbox_v_mic0.8; 采样方法:DPM++ 2M SED Karras 采样迭代步数:25 宽:768  高:512  生成批次:1  每批数量:2 CFG Scale: 6.5   随机种子:-1 注意:部分图像有变形,请谨慎观看!!! 1、3Guofeng3_v32Lig

    2024年02月13日
    浏览(246)
  • 源码加密与SDC沙盒:专业安全解决方案的卓越对比

    在信息安全领域,源码加密和SDC沙盒是两种重要的安全技术,为企业提供全面的保护措施。让我们来看看它们与其他产品的对比分析。 1. 对比传统加密技术:  相比于传统的加密技术,源码加密采用先进的算法和访问控制策略,将源代码转化为不可读的形式,有效避免了源码

    2024年02月11日
    浏览(62)
  • 【大全】常用加解密算性能、安全对比

    常用算法 1、古典加密算法 古典密码(classical cryptography)编码方式归根结底主要就是置换和代换. 置换:已知明文字母集S={a,b},置换后的密码可以是S’={b,a},即将明文字符位置发生变化后形成的密码就是置换密码. 代换:已知明文集S1={a,b,c},S2={1,2,3},将S1中的字符代换为S

    2024年04月17日
    浏览(29)
  • 各种排序算法性能对比

    C++数据结构与算法 目录 冒泡排序 ​ 插入排序 ​ 选择排序 ​ 上图中最后一列为:n+n*(n-1)/2 ​

    2024年02月10日
    浏览(43)
  • 项目协作软件对比分析:各大竞品的优缺点客观评析

    随着科技的发展,越来越多的企业和团队开始使用项目协作软件来提高工作效率和协同能力。然而,市场上众多的项目协作软件让许多用户感到困惑,不知道如何选择最适合自己的工具。本文将从多个角度对目前市场上的主要项目协作软件进行客观分析,帮助读者找到最符合

    2024年02月09日
    浏览(52)
  • 4.Java开源RSA/SM2非对称加密算法对比介绍

    前期内容导读: Java开源RSA/AES/SHA1/PGP/SM2/SM3/SM4加密算法介绍 Java开源AES/SM4/3DES对称加密算法介绍及其实现 Java开源AES/SM4/3DES对称加密算法的验证说明 非对称加密 主要是指 秘钥对 是非对称的(相对于 对称加密 而言),简单理解就是加密秘钥和解密秘钥不同,一般叫做公钥和私

    2024年02月14日
    浏览(46)
  • Web3 隐私增强技术对比:探秘加密时代的数据安全与隐私保护

    作者:Anders Dalskov(博士,Partisia Blockchain 密码学科学家) 来源:https://medium.com/partisia-blockchain/mpc-fhe-dp-zkp-tee-and-where-partisia-blockchain-fits-in-c8e051d053f7 编译:TinTinLand 本文重点是对主题提及的每种技术提供最简短、最直观的技术介绍。本文涉及的技术(Differential Privacy 除外)均

    2024年04月26日
    浏览(49)
  • 常用加密算法及实现原理

    原文合集地址如下,有需要的朋友可以关注 本文地址 对称加密是一种加密算法,也称为私钥加密。在对称加密中,使用同一个密钥(也称为私钥或密钥)对数据进行加密和解密。加密和解密过程都使用相同的密钥,因此称为对称加密。 对称加密的过程如下: 加密:将明文(

    2024年02月13日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包