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

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

算法类型特点优势缺陷代表算法
对称加密加解密的密钥相同计算效率高,加密强度高需提前共享密钥,易泄露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)已经不再被认为是安全的。因此,选择和使用散列函数时,建议优先考虑那些经过广泛审查并被认为是安全的现代算法。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Win10下在Qt项目中配置SQlite3环境

资源下载 官网资源:SQLite Download Page 1、sqlite.h sqlite-amalgamation-3450000.zip (2.60 MiB) 2、sqlite3.def,sqlite3.dll sqlite-dll-win-x64-3450000.zip (1.25 MiB) 3、 win10下安装sqlite3所需要文件 sqlite-tools-win-x64-3450000.zipht…

SpringCloud GateWay 在全局过滤器中注入OpenFeign网关后无法启动

目录 一、问题 二、原因 1、修改配置 2、添加Lazy注解在client上面 3、启动成功 一、问题 当在gateway的全局过滤器GlobalFilter中注入OpenFeign接口的时候会一直卡在路由中,但是不会进一步,导致启动未成功也未报错失败 2024-01-18 22:06:59.299 I…

EMQX安装和Java使用

一、EMQX介绍 EMQX是大规模分布式MQTT消息服务器,可以高效可靠连接海量物联网设备,实时处理分发消息与事件流数据,助力构建关键业务的物联网与云应用。EMQX 作为物联网应用开发和物联网平台搭建必须用到的基础设施软件,主要在边缘…

AI大模型学习笔记之二:什么是 AI 大模型的训练和推理?

在人工智能(AI)的领域中,我们经常听到训练(Training) 和 推理(Inference) 这两个词汇,它们是构建强大 AI 模型的关键步骤。我们通过类比人类的学习过程来理解这两个概念,可以更加自然而生动地理…

迅为RK3588开发板编译 Buildroot单独编译图形化界面(打包镜像)

上面 Kernel/U-Boot/Recovery/Rootfs 各个部分的编译后,将打包要用到的所有固件移动到 rockdev 目录下,然后打包为完整的 update.img 镜像。 首先在 linux 源码目录下输入以下命令进入编译的 UI 界面,进入之后如下所示: ./buil…

Flutter:跨平台移动应用开发的未来

Flutter:跨平台移动应用开发的未来 引言 Flutter的背景和概述 Flutter是由Google开发的一个开源UI工具包,用于构建漂亮、快速且高度可定制的移动应用程序。它于2017年首次发布,并迅速引起了开发者们的关注。Flutter采用了一种全新的方法来…

C++大学教程(第九版)5.19求Π的值

题目 代码 #include <bits/stdc.h> using namespace std;int main() {double pai 0;for (int count 1, i 1; count < 1000; i 2, count){int flag 1;if (count % 2 0){flag -1;}pai flag * (4.0 / (i * 1.0));cout << "当取前" << co…

C++ 之LeetCode刷题记录(十三)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅。 依旧是追求耗时0s的一天。 70. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可…

监控系统——Zabbix

目录 Zabbix概述 Zabbix 监控原理 Zabbix 与 Prometheus的区别 Zabbix 6.0 新特性 Zabbix 6.0 功能组件 Zabbix Server 数据库 Web 界面 Zabbix Agent Zabbix Proxy Java Gateway Zabbix 6.0 部署 部署 zabbix 服务端 添加 zabbix 客户端主机 自定义监控内容…

#LLMOps##AIGC# Dify_构建本地知识库问答应用-生成Al应用的创新引擎 用于构建助手API和GPT的开源开发平台

github&#xff1a; https://github.com/langgenius/dify/blob/main/README_CN.md 介绍文档&#xff1a;https://docs.dify.ai/getting-started/readme Dify 介绍 Dify 笔记 Dify 是什么&#xff1f; 开源的大语言模型&#xff08;LLM&#xff09;应用开发平台融合了后端即服…

vue二次封装ant-design-vue中的Modal弹窗组件,实现拖拽,全屏两种功能,原有参数属性不变

在我们的项目的有的地方需要用弹框的拖拽&#xff0c;以及弹窗自定义全屏显示的需求&#xff0c;所以再次将二次合一&#xff0c;同时弹框里面内容自适应屏幕高度 在ant-design-vue中&#xff0c;已经实现了拖拽&#xff0c;全屏的功能&#xff0c;下面是ant官网的示例 自定义…

关键信息基础设施安全相关材料汇总

文章目录 前言一、法律(1)《中华人民共和国国家安全法》(2)《中华人民共和国网络安全法》(3) 《中华人民共和国密码法》(4)《中华人民共和国数据安全法》(5) 《中华人民共和国个人信息保护法》二、行政法规(6)《中华人民共和国保守国家秘密法实施条例》(7) 《关键信息基础设施安…

解决Python安装库时出现的Requirement already satisfied问题

uirement already satisfied的问题当我们用pip install 库名时&#xff0c;出现了下面 Requirement already satisfied WARNING: Ignoring invalid distribution -ip 的问题 对于这样的问题&#xff0c;解决办法就是在 pip install 后加 - -target你所要添加的库文件地址(注意…

python2实现数据库表定时全量同步sftp

python2实现数据库表定时全量同步sftp 需求 周边系统需要通过sftp接口&#xff0c;将本系统数据库的8张表吐给sftp&#xff0c;文件名为txt,提供的字段用#号分隔&#xff08;逗号存在分隔不开的情况&#xff09;&#xff0c;8张表采用全量每天同步。 环境 操作系统centos7.…

pandas字符串操作(下)

目录 数据预览&#xff1a; 七、contains判断字符串里是否包含某字符 1.需求&#xff1a; 2.讲解 3.效果展示 八、startswith/endswith判断是否以某个字开头或结尾 1.需求&#xff1a; 2.讲解 3.效果展示 九、repeat将字符串进行重复 1.需求&#xff1a; 2.讲解 3.…

python的tabulate包在命令行下输出表格不对齐

用tabulate可以在命令行下输出表格。 from tabulate import tabulate# 定义表头 headers [列1, 列2, 列3]# 每行的内容 rows [] rows.append((张三,数学,英语)) rows.append((李四,信息科技,数学))# 使用 tabulate 函数生成表格 output tabulate(rows, headersheaders, tab…

数组中第K个最大元素(算法村第十关白银挑战)

215. 数组中的第K个最大元素 - 力扣&#xff08;LeetCode&#xff09; 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 **k** 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 你必须设计并实现…

Intel 显卡小结

Intel显卡从很早前的i740&#xff08;98年2月&#xff0c;4或8M现存&#xff0c;i740的RAMDAC为203MHZ,支持2X AGP规格,核心频率80MHZ,采用8M速度为100MHZ的SGRAM显存,像素填充率为55MPixels/s,三角形生成速度为500K Trianglws/s,支持DVD解压&#xff0c;AGP 2X&#xff0c;同时…

Qt框架学习 --- CTK编译(Qt5.15.2+vs2019+cmake)

系列文章目录 第二章 CTK的测试demo https://blog.csdn.net/yonug1107716573/article/details/135527289 文章目录 系列文章目录前言一、准备工作二、编译步骤1.修改文件2.编译CTK2.1 准备2.2 cmake界面配置2.3 配置编译器2.4 编译的配置设置2.5 选择需要编译的模块2.6 生成2.…

九、K8S-label和label Selector

label和label selector 标签和标签选择器 1、label 标签&#xff1a; 一个label就是一个key/value对 label 特性&#xff1a; label可以被附加到各种资源对象上一个资源对象可以定义任意数量的label同一个label可以被添加到任意数量的资源上 2、label selector 标签选择器 L…