对称密钥算法 非对称密钥算法 Hash函数 公钥和私钥在网络安全中的应用流程超超超详细,清楚,简单!!!

news/2025/10/31 21:31:01/文章来源:https://www.cnblogs.com/ztn195/p/19181290

不是哥们,理解了半天,感觉自己是天才😎😎😎

一、对称密钥算法(私钥加密)

对称密钥算法也称为私钥加密,这里的 “私钥” 指的是 “秘密的、需要保密的密钥” ,而不是非对称体系中的“私钥”。它强调的是这个密钥必须是私密的、不公开的,

因为对称密钥算法使用相同的密钥进行加密和解密,因此密钥必须保密,否则安全性会被破坏。这种算法通常用于加密大量数据,因为加密速度较快。常见的对称密钥算法包括:

  • DES(Data Encryption Standard):一种较旧的加密标准,密钥长度56位,现已不被视为安全。

  • 3DES(Triple DES):DES的增强版,使用三个密钥进行三次加密,安全性更高,但速度较慢。

  • RC-5:一种灵活的加密算法,支持可变密钥长度和轮数。

  • IDEA(International Data Encryption Algorithm):使用128位密钥,曾用于PGP加密。

  • AES(Advanced Encryption Standard):当前最常用的对称加密标准,支持128、192或256位密钥,安全且高效。

  • RC4:一种流密码,曾用于SSL/TLS,但现已发现漏洞,不推荐使用。

特点:加密和解密使用同一密钥,因此密钥分发需要安全通道,否则容易遭受攻击

 

二、非对称密钥算法(公钥加密)

非对称密钥算法也称为公钥加密,这个名称来源于它最革命性的特性:可以用公开的密钥进行加密。用对方的公钥加密 → 只有对方的私钥能解密。这是“公钥加密”一词的直接体现。

非对称密钥算法使用一对密钥:公钥和私钥。公钥可以公开,私钥必须保密。这种算法用于加密小量数据、数字签名和密钥交换。常见的非对称密钥算法包括:

  • RSA:基于大数分解的难度,广泛用于加密和数字签名。

  • ECC(Elliptic Curve Cryptography):基于椭圆曲线数学,提供相同安全性下更短的密钥长度,效率更高。

  • DSA(Digital Signature Algorithm):主要用于数字签名,不用于加密。

特点:公钥用于加密或验签,私钥用于解密或签名。解决了对称加密的密钥分发问题,但计算速度较慢。

在大多数非对称加密算法(如RSA)中,公钥和私钥在数学上是互为“反向操作”的关系。它们是一个密钥对,具有以下核心特性:

用密钥A加密的数据,可以用密钥B解密;反之,用密钥B加密的数据,也可以用密钥A解密。

这个特性是双向的。那么,如何决定哪个叫公钥,哪个叫私钥呢?答案完全取决于用途和保密需求:

所以呀这个核心特性就导致了非对称密钥算法有了两个功能:

功能一:加密信息,确保保密性

  1. 我们用接收方的公钥来加密。

  2. 这样,只有拥有对应私钥的接收方才能解密。

  3. 因为公钥可以公开,任何人都能给你发送加密消息,但只有你能看。

注意在使用非对称密钥算法的这个加密信息功能时,其中公钥的作用是“加密” 私钥的作用是“解密”。

功能二:创建数字签名,证明身份

  1. 我们反过来,用发送方的私钥来加密(签名)。

  2. 这样,任何人用发送方公开的公钥都能解密这个签名并验证。

  3. 因为能用公钥成功解密,就证明了这段数据必然是由对应的私钥持有者创建的。

 

注意在使用非对称密钥算法的这个数字签名功能时,其中公钥的作用是“验签” 私钥的作用是“签名”。

接下来我们来看一下数字签名的工作流程:

详细签名流程:

  1. 生成签名
    1. 发送方对原始数据计算哈希值(摘要)

    2. 发送方用自己的私钥加密这个哈希值 → 这就是"数字签名"

    3. 发送方将原始数据 + 数字签名一起发送

  2. 验证签名
    1. 接收方收到数据和签名

    2. 接收方用发送方的公钥解密数字签名,得到哈希值H1

    3. 接收方对收到的原始数据重新计算哈希值H2

    4. 比较H1和H2:如果相同,说明签名有效

这个流程的目的就是证明:数据确实来自声称的发送者,且数据未被篡改

  • 因为只有私钥的持有者才能生成那个能用对应公钥解密的“签名”。如果接收方用张三的公钥成功验证了签名,那就证明这条消息一定是张三的私钥签名的,从而确认了发送者的身份。

  • 验证过程中,接收方会重新计算收到数据的哈希值,并与从签名中解密出来的原始哈希值进行比对。如果数据在传输中被篡改(哪怕只是一个比特),重新计算出的哈希值将会与原始哈希值截然不同,导致验证失败。

三、Hash函数

Hash函数将任意长度的数据映射为固定长度的哈希值(摘要),用于确保数据完整性。常见的Hash函数包括:

  • MD5(Message-Digest Algorithm 5):产生128位哈希值,但已发现碰撞漏洞,不推荐用于安全应用。

  • SHA-1(Secure Hash Algorithm 1):产生160位哈希值,同样存在漏洞,逐渐被淘汰。

  • 更安全的Hash函数:如SHA-256、SHA-3,现在推荐使用。

特点:Hash函数是单向的,无法从哈希值还原原始数据;轻微的数据更改会导致哈希值巨大变化,用于验证数据是否被篡改。

 

四、公钥和私钥在网络安全中的应用流程

首先先来说一下数字证书是什么

数字证书就是CA对其他人的公钥进行了数字签名,用的是CA他自己的私钥

那既然数字证书也是一种数字签名,我们结合上文中提到的数字签名的两个目的

就可以得出数字证书的目的是:

一是这个证书确实是CA颁发的

二是其中的内容也就是其他人的公钥没有被篡改。

完整的安全通信流程

准备工作:证书颁发

  1. 用户A和用户B各自向证书颁发机构(CA)申请数字证书

    • A向CA提交自己的身份信息和公钥

    • CA通过线下方式验证A的身份真实性

    • CA用自己的私钥对"A的身份信息+A的公钥"进行数字签名,生成A的数字证书

    • 同样流程,B也获得自己的数字证书

第一阶段:A向B发起通信

步骤1: A发送自己的证书给B

  • A将自己的数字证书发送给B

  • 证书中包含:A的身份信息、A的公钥、CA的签名

步骤2: B验证A的证书

  • B收到A的证书后:

    • 使用系统中预置的CA的公钥验证证书上的CA签名

    • 如果签名验证通过,B确信:

      • 证书确实是由可信的CA颁发的

      • 证书内容(包括A的公钥)未被篡改

    • B从证书中提取出A的公钥

步骤3: B准备回复并加密

  • B想要回复A一条消息"Secret Data"

  • B生成一个随机的对称会话密钥(如AES密钥)

  • B用这个对称密钥加密消息"Secret Data" → 得到加密消息

  • B用A的公钥加密这个对称会话密钥 → 得到加密的对称密钥

步骤4: B对回复进行数字签名

  • B计算"加密消息+加密的对称密钥"的哈希值

  • B用自己的私钥加密这个哈希值 → 得到数字签名

  • B将以下内容发送给A:

    • 加密消息

    • 加密的对称密钥

    • 数字签名

    • B的数字证书(可选,如果A还没有的话)

第二阶段:A接收并处理B的回复

步骤5: A验证B的证书和签名

  • A收到B的数据包后:

    • 首先验证B的证书(如果收到了B的证书)

    • 使用B的公钥验证B的数字签名

    • 如果签名验证通过,A确信:

      • 回复确实来自B

      • 数据在传输过程中未被篡改

步骤6: A解密消息

  • A用自己的私钥解密"加密的对称密钥" → 得到对称会话密钥

  • A用对称会话密钥解密"加密消息" → 得到原文"Secret Data"

 

实现的安全目标

通过这个完整流程,我们实现了:

  1. 身份认证

    • 通过验证数字证书,确认A和B的真实身份

    • 不再是"你说你是谁就是谁",而是"CA证明你是谁"

  2. 信息保密

    • 使用对称加密保护实际通信内容

    • 使用非对称加密安全地传递对称密钥

    • 只有真正的接收方才能解密消息

  3. 数据完整性

    • 通过数字签名中的哈希验证,确保数据未被篡改

    • 任何对数据的修改都会导致签名验证失败

  4. 不可否认性

    • 由于B使用自己的私钥签名,无法抵赖发送过该消息

    • 同样,A也无法抵赖接收过B的回复

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

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

相关文章

读《代码大全2》读后感3

书中对 “变量命名与代码逻辑梳理” 的讲解。之前在写小程序的报名统计功能时,我把存储用户信息的变量命名为 “user1”“user2”,还把数据筛选、统计、导出的逻辑揉在一个函数里。后来社团换届,新成员接手代码时,…

revit api楼梯创建

revit api楼梯创建 using Autodesk.Revit.Attributes; using Autodesk.Revit.DB; using Autodesk.Revit.DB.Architecture; using Autodesk.Revit.UI; using System; using System.Collections.Generic;namespace Stai…

《代码大全2》初读有感

第一次翻开《代码大全2》的时候,我其实有点被它的厚度吓到了。这本厚得像砖头一样的书,真的能读完吗? 但慢慢读下去,我发现了很多有意思的地方。原来给变量取名有这么多讲究,以前我都是随便写个a、b、c的。作者说…

代码大全2{2}

最深的感悟是 “软件构建是系统性工程”。作者没有局限于代码本身,而是从软件质量目标、项目规划、团队协作等部分切入。其中关于 “技术债务” 的论述我觉得很有道理,每一次敷衍的设计都会为后续埋下隐患。优秀的程…

revit api 几何图元连接

revit api 几何图元连接namespace Autodesk.Revit.DB {public static class JoinGeometryUtils{public static bool AreElementsJoined(Document document, Element firstElement, Element secondElement);public sta…

读《代码大全2》读后感2

书中关于 “代码设计” 的内容,也帮我解决了大难题。在做图书管理系统时,我一股脑把所有功能都堆在一个类里,写了几百行代码后,想加个 “借阅记录查询” 功能,改一处就报错一处。直到看到书中说 “小型工具适合结…

公众号排版工具实测报告:为什么有一云AI编辑器成为全能高效的“排版专家”?

🧭 一、前言:AI排版正在重构创作效率 过去,公众号运营者最怕的不是写不出内容,而是排版。 错行、图片偏移、格式混乱…… 这些问题几乎每天都在消耗创作者的耐心。 但随着AI技术进入内容生态,“AI排版编辑器”迅…

代码大全2{1}

编程不只是写代码,前期的需求分析、架构设计和规划是高质量软件的基石。书强调 “磨刀不误砍柴工”,充分的前期准备能避免后期大量返工,那些关于项目复杂度评估、构建环境搭建的建议,既有理论高度又贴近实践,严谨…

Shooting Battle:Linux系统下的网络编程究极产物

服务器端 一、关键技术要点总结 1. 网络编程基础Socket API 使用:socket() → bind() → listen() → accept() 完整流程 TCP 字节流特性:无消息边界,需自定义协议(帧结束标记 <<<FRAME_END>>>)…

revit api隔离图元

revit api隔离图元namespace Autodesk.Revit.DB {public class View : Element{// 相关隔离的 APIpublic void ConvertTemporaryHideIsolateToPermanent();public void IsolateCategoriesTemporary(ICollection<Ele…

revit api明细表

revit api明细表如果想要读取明细表的内容,可以用 ViewSchedule 父类 TableView 的接口。 namespace Autodesk.Revit.DB {public class TableView : View{public int MaximumRowHeight { get; }public int MaximumCol…

【开题答辩实录分享】以《基于python的奶茶店分布数据分析与可视化》为例进行答辩实录分享 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025.10.31

今天没课在宿舍躺一天

使用RNNoise进行音频降噪

使用RNNoise进行音频降噪操作系统:Debian 12.5_x64 & Windows10_x64 rnnoise版本:0.2 gcc版本:12.2.0 python版本: 3.9.13 RNNoise是一个将传统数字信号处理与深度学习相结合的开源实时音频降噪库,可在消耗极…

程序员修炼之道:从小工到专家读后感(2025_10_31)

在正确与容易之间:每个程序员都面临的永恒选择 《程序员修炼之道》的第七章像一面镜子,照出了每个程序员日常工作中最真实的挣扎。当“在正确与容易之间做选择”这个命题出现在面前时,我感到心头一震——这不正是我…

Python测试(下) _ 高效率把bug揪出来

Python测试(下) _ 高效率把bug揪出来#导入测试内置模块import unittest#导入要测试的api,Student为类名from _oop import Studentfrom _oop import SmallStudent#需要继承unittest.TestCase,def函数必须用test_开头…

如何精准驱动菜品识别模型--基于米尔瑞芯微RK3576边缘计算盒

在人工智能与边缘计算深度融合的今天,将AI模型高效部署于终端设备已成为产业智能化的关键。本文将分享基于米尔MYD-LR3576边缘计算盒子部署菜品识别安卓Demo的实战经验。该设备凭借其内置的强劲瑞芯微RK3576芯片,为视…

MPK(Mirage Persistent Kernel)源码笔记(4)--- 转译系统

MPK(Mirage Persistent Kernel)源码笔记(4)--- 转译系统 目录MPK(Mirage Persistent Kernel)源码笔记(4)--- 转译系统0x00 概要0x01 Task和Event1.1 可执行任务1.1.1 任务定义1.1.2 任务类型1.2 事件1.2.1 事件…

征程 6 | 多任务 不同帧率 部署方案

1.方案描述 推理多任务模型时,可能会有不同任务分支 部署不同帧率的需求,例如 BEV 动态任务 20 帧,静态任务 10 帧这种情况。最简单的方式是编译两个模型,分开推理:模型 1:backbone+neck+ 动态 head 模型 2:bac…

10月31号

今天进行了外语学习。