加解密算法整理(对称加密、非堆成加密、散列函数)

加解密算法是现代密码学核心技术,从设计理念和应用场景上可以分为两大基本类型,如下表所示。

算法类型特点优势缺陷代表算法
对称加密加解密的密钥相同计算效率高,加密强度高需提前共享密钥,易泄露DES、3DES、AES、IDEA
非对称加密加解密的密钥不相同无需提前共享密钥计算效率低,存在中间人攻击可能RSA、ElGamal、椭圆曲线算法

1.加解密系统基本组成

现代加解密系统的典型组件包括算法和密钥(包括加密密钥、解密密钥)。

其中,加解密算法自身是固定不变的,并且一般是公开可见的;密钥则是最关键的信息,需要安全地保存起来,甚至通过特殊硬件进行保护。一般来说,密钥需要在加密前按照特定算法随机生成,长度越长,则加密强度越大。

加解密的典型过程如下图所示。加密过程中,通过加密算法和加密密钥,对明文进行加密,获得密文;解密过程中,通过解密算法和解密密钥,对密文进行解密,获得明文。

在这里插入图片描述

加解密的基本过程

根据加解密过程中所使用的密钥是否相同,算法可以分为对称加密(Symmetric Cryptography,又称共有密钥加密,Common-key cryptography)非对称加密(Asymmetric Cryptography,又称公钥加密,Public-key Cryptography)。两种模式适用于不同的需求,形成互补。某些场景下可以组合使用,形成混合加密机制。

2.加解密算法

2.1.对称加密

2.1.1. 基本概念

对称加密是一种加密方法,它使用相同的密钥来加密和解密数据。这种方法的关键特点是加密和解密操作共享同一个密钥,因此称为“对称”。这是对称加密与非对称加密的主要区别,后者使用一对密钥(一个用于加密,另一个用于解密)。

在对称加密中,发送方使用密钥对数据进行加密,然后将加密后的数据(密文)发送给接收方。接收方使用相同的密钥来解密这些数据,恢复原始信息(明文)。因为加密和解密使用相同的密钥,所以密钥的安全管理和分发变得非常重要。如果密钥落入未授权者手中,他们也能解密任何使用该密钥加密的数据。

对称加密算法通常比非对称加密算法更快,适用于大量数据的加解密。它们在实际应用中通常用于保护数据的机密性。一些常见的对称加密算法包括:

  1. AES (高级加密标准):目前最广泛使用的对称加密标准。
  2. DES (数据加密标准):较旧的标准,现已被更安全的AES所取代。
  3. 3DES (三重数据加密算法):是对DES的一种改进,提供了比DES更强的安全性。
  4. Blowfish:是一个设计简单但安全性很高的加密算法。

对称加密的主要挑战在于密钥的分发和管理,因为所有通信双方都需要事先拥有相同的密钥。

2.1.2.主要应用场景

对称加密由于其高效性和相对简单性,在多种应用场景中得到广泛应用。主要的应用场景包括:

  1. 网络通信加密:对称加密常用于保护互联网上的数据传输。例如,HTTPS协议在建立安全连接时使用对称加密来加密网页内容。

  2. 文件和数据库加密:对称加密算法被用于加密存储在计算机或服务器上的敏感文件和数据库,以保护数据不被未授权访问。

  3. 数字版权管理 (DRM):对称加密用于数字内容的版权保护,确保只有授权用户才能访问或使用这些内容。

  4. 密码学货币和区块链:许多加密货币系统,如比特币,使用对称加密算法来保障交易的安全性。

  5. 无线网络安全:无线网络如Wi-Fi使用对称加密来保护网络流量,防止未授权的网络访问。

  6. 金融服务行业:银行和其他金融机构使用对称加密来保护客户数据和进行安全的金融交易。

  7. 系统和设备认证:对称加密在各种设备和系统的认证机制中使用,以确保只有授权的设备和用户可以访问服务。

  8. 个人数据保护:个人使用对称加密来保护文件、通讯记录等个人数据,以防止数据泄露和隐私侵犯。

在实际应用中,对称加密经常与非对称加密结合使用,以实现密钥的安全分发和更全面的安全策略。例如,在TLS/SSL协议中,通常使用非对称加密来安全地交换对称密钥,然后使用对称加密来加密通信数据。这样结合使用可以兼顾加密的安全性和效率。

2.1.3.对称加密的缺陷

对称加密虽然高效且广泛应用,但它也存在一些缺陷和局限性:

  1. 密钥分发和管理的挑战:对称加密的最大挑战之一是安全地分发密钥。因为加密和解密使用同一个密钥,所以必须以某种安全的方式将密钥传递给通信双方。在没有安全通道的情况下,这可能是个问题。

  2. 密钥数量的增长:在大规模的应用中,每对通信方都需要一个独特的密钥。随着参与方的增加,所需管理的密钥数量呈几何级增长,这使得密钥管理变得复杂和困难。

  3. 缺乏非抵赖性:对称加密不提供非抵赖性(non-repudiation),这意味着发送方可以否认他们发送了某个消息,因为加密和解密使用相同的密钥,接收方也可以产生相同的加密消息。

  4. 安全性依赖于密钥的保密性:对称加密的安全性完全取决于密钥的保密性。如果密钥被泄露或被破解,加密的数据就会被暴露。

  5. 缺乏灵活性:在需要频繁更换密钥或在不同用户间共享数据的场景中,对称加密可能不够灵活。

  6. 易受某些类型攻击的影响:对称加密算法可能易受到字典攻击、暴力破解攻击等。虽然这些攻击对于强算法来说不是特别有效,但在密钥强度不足或算法实现不当的情况下,它们仍然是安全风险。

由于这些缺陷,对称加密通常与其他类型的加密(如非对称加密)和安全措施结合使用,以提供更全面的安全保障。例如,非对称加密可以用于安全地交换对称加密的密钥,而数字签名可以提供非抵赖性。

2.2.非对称加密

非对称加密,也称为公钥加密,是一种加密方法,它使用一对密钥来加密和解密数据。这对密钥包括一个公钥和一个私钥,它们数学上相关但在实践中几乎不可能从一个推导出另一个。非对称加密的关键特点是:

  1. 公钥和私钥:公钥用于加密数据,任何人都可以访问它。私钥用于解密数据,必须保密并且只有密钥的所有者才能访问。

  2. 加密和解密过程:发送方使用接收方的公钥对数据进行加密,然后发送加密后的数据。接收方使用自己的私钥来解密这些数据。

  3. 安全性:非对称加密的安全性基于公钥和私钥之间的数学关系,以及从公钥推导出私钥的困难度。

  4. 应用:非对称加密不仅用于加密数据,还广泛用于数字签名,以验证数据的完整性和来源。

非对称加密相较于对称加密的优势包括:

  • 密钥分发的简化:由于公钥可以公开,因此不需要一个安全的通道来共享密钥。
  • 提供非抵赖性:通过数字签名,发送方不能否认他们发送了消息,因为只有持有对应私钥的人才能生成有效的签名。

然而,非对称加密也有其局限性:

  • 速度:相比对称加密,非对称加密通常更慢,不适合大量数据的加密。
  • 密钥长度:为了保持安全性,非对称加密的密钥长度通常要比对称加密长得多。

常用的非对称加密算法包括:

  • RSA:目前最广泛使用的非对称加密算法之一,适用于加密和数字签名。
  • ECC (椭圆曲线密码学):使用椭圆曲线算法,提供与RSA相同的安全性,但使用更短的密钥。
  • Diffie-Hellman:用于安全密钥交换,而不是加密或签名。

在实际应用中,非对称加密通常与对称加密结合使用。例如,在SSL/TLS协议中,非对称加密用于安全地交换对称密钥,然后对称加密用于加密实际的通信数据。这种结合方法利用了非对称加密的密钥管理优势和对称加密的速度优势。

2.3.散列函数

散列函数(Hash Function)是一种从任意大小的数据输入(通常称为“消息”)生成固定大小输出(通常称为“散列值”或“哈希值”)的算法。它们在计算机科学和密码学中扮演着关键角色,具有以下特点:

  1. 确定性:相同的输入总是产生相同的输出散列值。

  2. 高效性:对于任何给定的输入,散列函数能够快速计算出散列值。

  3. 抗碰撞性

    • 弱抗碰撞性:对于给定的输入值,很难找到另一个不同的输入产生相同的散列值。
    • 强抗碰撞性:很难找到任何两个不同的输入值,它们产生相同的散列值。
  4. 雪崩效应:输入值的微小变化会导致输出散列值的显著变化。

散列函数的主要应用包括:

  • 数据完整性验证:散列值用于确保数据在传输或存储过程中未被篡改。
  • 安全的密码存储:存储密码的散列值而非明文,以增强安全性。
  • 数字签名:在非对称加密中,散列函数用于创建需要被加密的消息的摘要。
  • 数据检索:在数据结构(如哈希表)中,散列函数用于快速定位和检索数据项。

常见的散列函数包括:

  • MD5:虽然由于安全性问题不再推荐使用,但在较旧的系统中仍然普遍存在。
  • SHA-1:比MD5更安全,但也存在已知的安全弱点。
  • SHA-256SHA-3:目前广泛使用的安全散列算法,用于多种安全应用和协议。

散列函数在设计时旨在使得从散列值反向推导原始数据(逆向工程)变得非常困难或不可行,从而保护数据的安全性和完整性。然而,随着计算能力的提升和新的攻击方法的发现,一些旧的散列函数(如MD5和SHA-1)已经不再被认为是安全的。因此,选择和使用散列函数时,建议优先考虑那些经过广泛审查并被认为是安全的现代算法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/632523.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DotNET 8 新特性 - AoT 编译、 MinimalAPI、Json源生成器

AoT编译方式特性 裁剪减小体积,取消JIT编译,不使用反射技术。直接产生目标机器二进制代码,目前支持x86,解决被反编译问题。 使用本机 AOT 发布的应用:最大程度减少了磁盘占用空间缩短了启动时间减少了内存需求 | 功能…

Unity中四元数常用的方法

单位四元数 #region 单位四元数print(Quaternion.identity);testObj.rotation Quaternion.identity;//初始化对象时可能会用来赋值Instantiate(testObj,Vector3.zero,Quaternion.identity);#endregion 插值运算 #region 插值运算 //四元数中也提供了如同Vector3的插值运算 /…

Linux学习记录——사십삼 高级IO(4)--- Epoll型服务器(1)

文章目录 1、理解Epoll和对应接口2、简单实现 1、理解Epoll和对应接口 poll依然需要OS去遍历所有fd。一个进程去多个特定的文件中等待,只要有一个就绪,就使用select/poll系统调用,让操作系统把所有文件遍历一遍,哪些就绪就加上哪…

SQL-窗口函数

什么是窗口函数 可以像聚合函数一样对一组数据进行分析并返回结果,二者的不同之处在于,窗口函数不是将一组数据汇总成单个结果,而是为每一行数据都返回一个结果。 窗口函数组成部分 1.创建数据分区 窗口函数OVER子句中的PARTITION BY选项用…

拼多多无货源中转仓项目真的靠谱吗?发展前景如何?

阿阳最近一直在关注无货源电商这一块,尤其是拼多多无货源中转仓, 现如今也有了自己的运营团队和交付团队,整体来看这个项目还算不错! 说实话,在考察这个项目的时候,看到市面上很多人在做,包括我…

一、VTK 9.0.0 编译安装步骤 VS2019 CMake3.26.0

零基础开始学习VTK ,请跟我进行第一步,配置好开放环境! 首先,你时间比较紧急,想直接使用VTK ,而无需编译、那么请使用 PCL-1.12.0-AllInOne-msvc2019-win64.exe 它已经帮你编译好VTK 9 了,直…

echarts柱状图顶部设置倾斜并且展示数字

将下面代码直接复制粘贴在此运行就能查看效果Apache ECharts,一款基于JavaScript的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。https://echarts.apache.org/examples/zh/editor.html?care…

AI制作《流浪地球3》高清宣传片

AI制作《流浪地球3》高清宣传片 星辰大海,再次启航,人类的冒险,永无止境。The vast expanse of stars and oceans, setting sail once again. Human adventure knows no bounds. 当家园变得遥不可及,我们唯有勇往直前。With our …

Docker部署Dubbo-Admin浏览器无法访问问题!

Dubbo配置开发环境 很多小伙伴在使用docker部署Dubbo-Admin会出现浏览器无法访问问题,但是虚拟机防火墙都是关着的,那么这可能是镜像源出现问题了,可以按照如下方法操作: 先将现有的镜像和容器全部删除(配置完镜像源需…

[Python] 如何通过ctypes库来调用C++ 动态库 DLL?

ctypes库介绍 ctypes是Python的一个外部库,它提供了一种灵活的方式来调用C语言的动态链接库(DLL)或共享库(SO)。通过ctypes,我们可以在Python中直接调用C语言编写的函数和变量,从而实现跨语言的互操作。 ctypes 它提供了与 C 兼容的数据类型,并允许调用 DLL 或共享库中的…

【Internet Protocol】ip介绍,如何组局域网实现远程桌面和文件共享

文章目录 1.何为“上网”1.1 定义1.2 为什么连了WiFi就能上网了? 2.ip2.1 什么是ip2.2 为什么区分广域网和局域网,ip的唯一性2.3 如何查看设备的ip2.4 什么叫"ping"2.5 区分是否两个ip是否在同一局域网2.5.1 最稳妥的方式:ip&m…

第 2 章 数据结构和算法概述

文章目录 2.1 数据结构和算法的关系2.2 看几个实际编程中遇到的问题2.2.1 问题一-字符串替换问题2.2.2 一个五子棋程序2.2.3 约瑟夫(Josephu)问题(丢手帕问题)2.2.4 其它常见算法问题: 2.3 线性结构和非线性结构2.3.1 线性结构2.3.2 非线性结构 2.1 数据结构和算法的关系 数据 …

Javascript,到底要不要写分号?

小白随机在互联网上乱丢一些赛博垃圾,还望拨冗批评斧正。 要不要加分号? 先说结论:“不引起程序出错的前提下,加不加都可以,按自身习惯来。” 为什么JS可以不加分号? 实际上,行尾使用分号的风…

五、基础篇 vue列表渲染

在v-for里使用对象用 v-for 把一个数组对应为一组元素 我们可以用 v-for 指令基于一个数组来渲染一个列表。v-for 指令需要使用 item in list形式的特殊语法&#xff0c;其中 list是源数据数组&#xff0c;而 item 则是被迭代的数组元素的别名。 <template><div clas…

【leetcode题解C++】54.螺旋矩阵I and 59.螺旋矩阵II

54.螺旋矩阵I 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5]示例 2&#xff1a; 输入&#xff1a;m…

C# 实现单线程异步互斥锁

文章目录 前言一、异步互斥锁的作用是什么&#xff1f;示例一、创建和销毁 二、如何实现&#xff1f;1、标识&#xff08;1&#xff09;标识是否锁住&#xff08;2&#xff09;加锁&#xff08;3&#xff09;解锁 2、异步通知&#xff08;1&#xff09;创建对象&#xff08;2&a…

Python单元测试之pytest的使用

一、前提准备 1、前提&#xff1a;需要安装pytest和pytest-html(生成html测试报告&#xff09; pip install pytest 和 pip install pytest-html 安装插件&#xff1a;pip install 插件名 2、命名规范 Pytest单元测试中的类名和方法名必须是以test开头,执行中只能找到test开…

Spring(19) ThreadPoolTaskExecutor 线程池的使用

目录 一、线程池简介1.1 为什么使用线程池1.2 线程池为什么需要使用队列1.3 线程池为什么要使用阻塞队列而不是用非阻塞队列1.4 如何配置线程池1.5 execute() 和 submit() 方法 二、ThreadPoolTaskExecutor 线程池简介2.1 简介2.2 核心参数配置2.3 ThreadPoolTaskExecutor 内部…

数据库作业三

1.创建student和score表 2.为student表和score表增加记录 3.查询student表的所有记录 4.查询student表的第2条到4条记录 5.从student表查询所有学生的学号&#xff08;id&#xff09;、姓名&#xff08;name&#xff09;和院系&#xff08;department&#xff09;的信息 6.从st…

flutter3使用dio库发送FormData数据格式时候的坑,和get库冲突解决办法

问题描述 问题1&#xff1a;当你使用FormData.from(Flutter3直接不能用)的时候&#xff0c;可能会提示没有这个方法&#xff0c;或者使用FormData.fromMap(flutter3的dio支持)的时候也提示没有&#xff0c;这时候可能就是和get库里面的Formdata冲突了 问题1&#xff1a;The me…