即时通讯安全篇(十六):对称加密 vs 非对称加密?一文搞懂

news2026/4/8 14:49:29
本文由vivo 互联网服务器团队Deng Qian分享有排版和内容优化。1、引言在了解加密原理前我们来看看这样一个故事小红和小明是情侣一天小红给小明发短信说“亲爱的我银行卡上没有钱了你给我转1万块钱吧。”有过上当受骗经历的人都知道这有可能是小偷偷了小红手提包然后拿手机发的短信。不过我们小明学过加密原理于是他回复说“你直接拿我的银行卡刷吧密码加上我们第一次约会的日期就是663156。”很明显只有小明和小红知道他们第一次约会是什么时候假设是2008年4月1号那么小红就可以根据计算663156-200841462315得到银行卡密码就可以消费了。这就是加密的本质将信息与密钥相加得到加密后的信息只有知道密钥的人才能解密。本文将以通俗案例讲解加密本质介绍对称加密含 AES、迪菲–赫尔曼密钥交换与非对称加密RSA原理、特点及应用并阐释其数学基础。2、系列文章《即时通讯安全篇一正确地理解和使用Android端加密算法》《即时通讯安全篇二探讨组合加密算法在IM中的应用》《即时通讯安全篇三常用加解密算法与通讯安全讲解》《即时通讯安全篇四实例分析Android中密钥硬编码的风险》《即时通讯安全篇五对称加密技术在Android平台上的应用实践》《即时通讯安全篇六非对称加密技术的原理与应用实践》《即时通讯安全篇七用JWT技术解决IM系统Socket长连接的身份认证痛点》《即时通讯安全篇八如果这样来理解HTTPS原理一篇就够了》《即时通讯安全篇九你知道HTTPS用的是对称加密还是非对称加密》《即时通讯安全篇十为什么要用HTTPS深入浅出探密短连接的安全性》《即时通讯安全篇十一IM聊天系统安全手段之通信连接层加密技术》《即时通讯安全篇十二IM聊天系统安全手段之传输内容端到端加密技术》《即时通讯安全篇十三信创必学一文读懂什么是国密算法》《即时通讯安全篇十四网络端口的安全防护技术实践》《即时通讯安全篇十五详解硬编码密码的泄漏风险及其扫描原理和工具》《即时通讯安全篇十六对称加密 vs 非对称加密一文搞懂》☜ 本文3、什么是秘钥既然加密需要密钥那么密钥是什么呢密钥是作用于加密时的一串密码通过密钥进行信息加密传输到达接收者和监听者由于接收者也有密钥所以接收者可以根据密钥进行解密。从而防止通讯信息泄露。4、什么是对称加密前言讲的故事就是一个对称式加密小明和小红都知道第一次约会的日期。所以传统的对称式加密需要通讯双方都保存同一份密钥通过这份密钥进行加密和解密。所以对称加密也称为单密钥加密。对称加密的优势在于加解密速度快但是安全性较低密钥一旦泄露所有的加密信息都会被破解。同时密钥的传输和保密也成为难题。为了解决密钥传输的问题出现通过密钥交换建立共享密钥的技术。具体如何建立共享密钥呢我们往下看。5、对称加密之建立共享密匙在小明、小红和小偷的三人世界中由于小明是学过加密原理的知道迪菲–赫尔曼密钥交换Diffie-Hellman Key Exchange所以他知道如何建立共享密钥。5.1 颜料混合把戏接下来我们看看如何通过颜料混合把戏建立共享密钥吧。假设在房间中有小明、小红和小偷三个人每个人各自拥有相同颜色的颜料。在房间的正中间也有这些颜料。接下来小明要和小红建立共享密钥了。此时小明对大家说“我要用蓝色。”然后小明从自己的颜料里选择了黄色这个黄色就是小明的私钥小红和小偷都不知道。小明将自己的私钥黄色与公钥蓝色混合后得到了一种不能分解的颜色我们就叫“小明-蓝色”吧虽然大家都知道黄蓝变绿但是这里我们为了知道是谁的混合色还是以名字加公钥颜色来称呼然后小明将“小明-蓝色”公布了出来。同样小红听到了小明说用蓝色后也选择了自己的私钥红色与公钥蓝色混合得到了“小红-蓝色”并公布了出来。此时房间中小明、小红、小偷三人都知道了几个信息1他们都用了蓝色2小明公布了“小明-蓝色”小红和小偷不知道是什么颜料与蓝色的混合3小红公布了“小红-蓝色”小红和小偷不知道是什么颜料与蓝色的混合。接下来见证奇迹的时刻到了小明拿到“小红-蓝色”与自己的私钥“黄色”混合得到“小红-蓝色-小明”的新颜料。同样的小红拿到“小明-蓝色”与自己的私钥“红色”混合得到“小明-蓝色-小红”。大家发现了吗“小红-蓝色-小明”和“小明-蓝色-小红”是一模一样的颜色。而小偷不知道小明和小红的私钥颜色无法混合出与他们相同的颜色。至此共享密钥建立起来了。在了解了共享密钥的建立过程后我们将告别实体颜料采用数字的方式来建立共享密钥。注大家可能想到了小偷可以根据自己的颜料与公钥“蓝色”混合尝试得出“小明-蓝色”和“小红-蓝色”。这样的方法称之为穷举法也就是尝试所有的可能性进行信息破解所以加密算法在理论上都是可以通过穷举法破解的只不过实际上超级计算机都需要计算万亿年才能穷举出所有可能性。5.2 乘法把戏首先我们假设乘法如同颜料混合一样是不能分解的看看如何用乘法与数字建立共享密钥。小明公开了一个数字5然后小明选择了一个私人数字4然后利用乘法将两者混合起来得到“小明-5”20接下来小红也选择了一个私人数字7得到“小红-5”35小明拿到35*4140小红拿到20*7140。共享密钥建立完成。大家也发现了小偷知道20,35,5这三个数字后用除法就能算出小明和小红的私钥。所以接下来我们将了解实际使用中的如何使用乘法把戏来防止私钥被计算出来的。6、对称加密之迪菲·赫尔曼密钥交换算法我们都知道幂运算但是要让计算机计算就比较难了。所以我们会用幂运算作为建立共享密钥的乘法把戏。同时我们还要了解钟算的原理这里的钟可以理解成我们经常看到的时钟我们常见的时钟最大是12如果当前是10点过了4个小时后就变成了下午2点。也就是(104)mod122。了解了钟算和幂运算后就开始进入正题吧。还是小明、小红和小偷的房间小明声明了钟为11幂运算的底为2接下来小明和小红分别选择了自己的私钥4和7。1第一步小明混合自己的“小明-11,2”得到小红混合自己的“小红-11,2”得到。2第二步小明拿到“小红-11,2”7进行计算小红拿到“小明-11,2”5进行计算。大家注意到了吗小明和小红建立了共享密钥3而小偷无法根据已知的11、2、5、7这几个数字计算出密钥或小明小红的私钥。有了共享密钥后小明和小红就可以安全进行加密传输了。迪菲赫尔曼密钥交换7、 对称加密之AES加密过程AES 的全称是 Advanced Encryption Standard 是最流行的对称加密算法其加解密速度快。AES支持128位192位256位三种长度的密钥密钥越长安全性越高。AES加密时会把明文切分成许多小块的明文然后对每块明文单独加密将加密后的密文传送出去接收方再将密文切块解密得到明文。如下图所示。AES加密原理上一步中小明和小红已经协商好了密钥3。接下来就可以通过对称加密进行通信了。在小明、小红和小偷的房间中小明想把密码“462315”告诉小红于是1第一步将密码按照一位的长度进行切分实际中通常按128位进行切分就变成了“4”“6”“2”“3”“1”“5”2第二步对每块明文通过密钥3进行加密结果就是“795648”然后小明告诉小红和小偷“我的密码是795648”3第三步小红拿到密文后对密文进行切块对每块通过密钥3进行解密就得到了正确的密码“462315”而小偷由于不知道密钥就无法解密出正确的信息。8、什么是非对称加密8.1 概述在对称加密中加密和解密使用的是同一份密钥。所以在非对称加密中加密和解密使用的是不同的密钥。非对称加密中的密钥分为公钥和私钥。公钥顾名思义就是公开的任何人都可以通过公钥进行信息加密但是只有用户私钥的人才能完成信息解密。非对称加密带来了一个好处避免了对称式加密需要传输和保存同一份密钥的痛苦。现在最流行的非对称加密算法就是RSA加密算法具体是怎么做的呢我们继续往下看。8.2 RSA加密过程百科是这么解释的RSA加密算法是一种非对称加密算法在公开密钥加密和电子商业中被广泛使用。RSA是由罗纳德·李维斯特Ron Rivest、阿迪·萨莫尔Adi Shamir和伦纳德·阿德曼Leonard Adleman在1977年一起提出的。当时他们三人都在麻省理工学院工作。RSA 就是他们三人姓氏开头字母拼在一起组成的。▲ RSA算法的作者合影照片拍摄于1978年前面我们讲了如何通过钟算和幂函数建立不可逆计算机可以通过穷举法计算出私钥实际场景中就算是超级计算机也要计算几万亿年之久的共享密钥。由于小红是小明的女朋友小明天天在小红面前给她讲RSA加密算法的原理所以小红也知道怎么得出自己的公钥和私钥。接下来我们一起跟着小红的脚步看看RSA加密的公钥和私钥是怎么计算出来的1第一步小红选择了两个很大的质数p和q这里为了便于计算选择2和11;2第二步计算p和q的乘积np*q2*11223第三部计算n的欧拉函数φ(n)(p-1)*(q-1)104第四步选择一个小于φ(n)且与φ(n)互质的整数e{1,3,7,9}这里选择e75第五步计算e对于φ(n)的模反元素ed mode φ(n) 1dd3。到这里小红就得到了他自己的公钥(n,e)和私钥(n,d)。其中n就是钟大小e和d就是幂函数的幂。接下来就通过计算出来的公钥和私钥进行数据的加解密。还是小明、小红和小偷三个人小红对大家说我的公钥是22,7小明知道了小红的公钥后想讲自己的信息“14”告诉小红于是就用小红公开的公钥进行加密。具体步骤如下1第一步小明根据要加密的信息14进行计算得到加密后的信息20然后将20告诉小红和小偷2第二步小红有自己的私钥将加密信息20进行解密得到了小明想传递给小红的信息。而小偷呢知道22,7,20但是不知道小红的密钥22,3无法解密出正确的信息。RSA加密算法在数字签名中也发挥着巨大的作用假设小偷可以假冒小红说小红的公钥是22,9而小明不知道是小偷假扮的按照小偷的公钥加密后结果被小偷解密了。数字签名的作用就是防止信息被篡改小红说她的公钥是22,7的同时使用私钥给这段信息通常使用MD5值计算签名加上签名小明得到公钥22,7和签名13小明拿到签名后利用公钥计算出信息是否被篡改。9、加密的实际作用本文使用的很小的数来进行加密原理的讲解为了是读者可以方便进行计算。在实际使用中n,e都是特别大的数其中n的长度都在768以上1024长度被认为是基本安全的。123018668453011775513049495838496272077285356959533479219732245215172640050726365751874520219978646938995647494277406384592519255732630345373154826850791702612214291346167042921431160222124047927473779408066535141959745985690214341333478071698956898786044169848212690817704794983713768568912431388982883793878002287614711652531743087737814467999489×3674604366679959042824463379962795263227915816434308764267603228381573966651127923337341714339681027009279873630891710、写在最后或许看到这里大家心里还有许多疑惑1为什么小明和小红建立共享密钥时通过几次幂运算和钟算就能得到一样的共享密钥2为什么RSA加密算法要用两个质数3为什么通过公钥加密的信息可以通过私钥解开加密算法的背后是一道道迷人的数学难题。而RSA加密算法之所以被广泛运用是因为一个名为整数分解的古老数学问题你可以轻易找到两个很大的质数相乘得到一个结果n但是要将这个结果n分解回两个质数就变得极其困难。尽管这个所谓的“整数分解”问题被研究了数个世纪还没人能找到一个足够高效的通用方法解决它并对标准RSA钟大小造成危害。数学史中充满了未解决的问题尽管这些迷人的问题缺乏任何实际应用却单靠其美学特质就吸引了数学家进行深入探究。令人颇感惊讶的是许多这类迷人但显然无用的问题后来都有了很大的实用价值这一价值只有在问题被研究数个世纪后才得以破解。整数分解这一问题由来已久。对其最早的严肃研究似乎是在17世纪由数学家费马Fermat和梅森Mersenne进行的。欧拉Euler和高斯Gauss两位数学“泰斗”也在接下来的世纪里对这一问题做出了贡献。但直到公钥加密于20世纪70年代被发明分解大数字的困难才成为一个实际应用的关键。11、本文小结最后总结一下。首先我们通过一个诈骗短信的例子引出了加密的原理就是信息密钥密钥就是对信息进行加解密的一串数字。然后通过颜料混合把戏形象的演示了如何建立共享密钥。在使用乘法建立共享密钥的过程中学习了钟算和幂运算接着我们了解了RSA加密算法的过程通过两个质数生成公钥和私钥。最后我们根据公钥进行信息加密再通过私钥完成信息解密。12、参考资料[1] 探讨组合加密算法在IM中的应用[2] 一文读懂常用加解密算法与网络通讯安全[3] 非对称加密技术的原理与应用实践[4] 你知道HTTPS用的是对称加密还是非对称加密[5] IM聊天系统安全手段之通信连接层加密技术[6] IM聊天系统安全手段之传输内容端到端加密技术[7] 信创必学一文读懂什么是国密算法的[8] 传输层安全协议SSL/TLS的Java平台实现简介和Demo演示[9] 理论联系实际一套典型的IM通信协议设计详解含安全层设计[10] 微信新一代通信安全解决方案基于TLS1.3的MMTLS详解[11] 来自阿里OpenIM打造安全可靠即时通讯服务的技术实践分享[12] 简述实时音视频聊天中端到端加密E2EE的工作原理[13] 移动端安全通信的利器——端到端加密E2EE技术详解[14] 通俗易懂一篇掌握即时通讯的消息传输安全原理[15] 一分钟理解 HTTPS 到底解决了什么问题[16] 一篇读懂HTTPS加密原理、安全逻辑、数字证书等[17] 基于Netty的IM聊天加密技术学习一文理清常见的加密概念、术语等[18] 手把手教你为基于Netty的IM生成自签名SSL/TLS证书[19] 即时通讯初学者必知必会的20个网络编程和通信安全知识点[20] 零基础IM开发入门(五)什么是IM系统的端到端加密[21] 微信团队分享来看看微信十年前的IM消息收发架构你做到了吗[22] 零基础IM开发入门(一)什么是IM系统[23] 一套亿级用户的IM架构技术干货(上篇)整体架构、服务拆分等[24] 转转平台IM系统架构设计与实践(一)整体架构设计[25] 一套分布式IM即时通讯系统的技术选型和架构设计即时通讯技术学习- 移动端IM开发入门文章《新手入门一篇就够从零开发移动端IM》- 开源IM框架源码https://github.com/JackJiang2011/MobileIMSDK备用地址点此本文已同步发布于http://www.52im.net/thread-4899-1-1.html

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…