(1)非对称加密——RSA——史上最通俗的小白可看懂!
摘要
我身边有几个年龄分布在4-6岁的小朋友。由于他们还都不能熟练地掌握100以内的加减法,所以我原计划的对称加密,在他们看来还是有点难。那非对称加密呢,需要他们能熟练进行三位数的乘法,我想就可以逐步开展了。鉴于此,如果你大学已经毕业,甚至研究生都毕业了,那下面的内容一定是非常容易。好运开始!
前言
看到这个“高大上”的名字,许多人是不是就准备放弃继续看下去了!且听我用“人话”细细道来。
第一个例子
据说康熙打仗时,就用到了加密技术(当然西方那就更早了),边疆将军将军情信息使用事先约定好的方法加密,皇帝使用同样的加密方法(俗称算法),解密[1]。这就是所谓的对称加密!顾名思义,加密和解密使用同样的方法(算法或密码)。而非对称加密,即,加密和解密使用的方法是不相同的。
非对称加密的例子
你心里想一个三位数
,将其乘以91
,将结果的后三位
告诉我,我就能知道你心里想的数字是多少!
你心里想一个四位数
,将其乘以73
,将结果的后四位
告诉我,我就能知道你心里想的数字是多少!
你心里想一个五位数
,将其乘以11
,将结果的后五位
告诉我,我就能知道你心里想的数字是多少!
如:
(1)需要传输:251;加密:251*91=22841;传输的密文:841;解密:841*11=9251;获得实际数据(后三位):251
(2)需要传输:3697;加密:3697*73=269881;传输的密文:9881;解密:9881*137=9251;获得实际数据(后四位):3697
(3)需要传输:56841;加密:3697*11=625251;传输的密文:25251;解密:25251*9091=229556841;获得实际数据(后四位):56841
此处我使用Excel做了一个简单的加密解密工具,使用链接:https://pan.baidu.com/s/1Va54Q2UHVuuJe_fy5EA-hA 提取码: ap6e
具体是什么原因,先卖个关子,待在文章结尾给大家揭晓。
实际的非对称加密——RSA
即将出现大家最讨厌的东西——概念!!
明文:需要加密的信息(如各类军事情报、银行数据等)
公钥:所有人都可以知道的加密密码(这个是最难理解的,也就是说:即使你知道了,也截获了传输中的信息,也是没有用)[2]
私钥:只有需要解密的一方才知道的绝对密码(这个肯定是保存在银行自己手里,其他人是断然不能让知道的!类似例子,你懂的!)
加密算法:就是具体将这些密码如何与需要传输的信息相互作用(需要一种方法的吧——如上例子中的两次乘法操作,实际中这两个方法不一定相同,显然,它很有可能是公开的)
密文:需要保密的数据——明文和密码相作用后的秘密信息(如你和女朋友的羞羞聊天记录——如果你有女朋友的话——传输路线上早被转换成二进制,这个转换过程可以近似看做是一种“加密”)
RSA加密原理:
此处为干货,需要带上你聪明的大脑!
关键技术:
(1)发送的数据:Input
(2)加密方法F1:Input的e次方,再除以N得到余数C;
(3)传输的数据:C
(4)加密密码:e
(5)解密方法F2:C的d次方,再除以N,得到余数output
(6)解密密码:d
(7)获得明文:output;
(8)关键核心:显然以上最关键的是,e,d和N是怎么来的:1)选取两个质数(素数),P和Q,将其相乘,得N;2)y=(P-1)*(Q-1);3)选个数e,其要满足以下条件:比1大,比y小,且要和y互质4)计算一个数d;其要满足以下条件:d =(y*k+1)/e;此处的k是任意一个整数,目的是让d为整数(显然只要的k会有很多,也就可以得到很多满足条件的d,我们只需要取其中一个就行!)[2.5]
至此这个RSA加密的原理就全部完了,是不是还意犹未尽!实际也就这么简单,我们的现在几乎所有的银行系统、射频卡加密系统、XX加密系统都是这个原理。如果你发现这其中的漏洞,那恭喜你,马上就不愁吃住了——全球所有的大国情报系统都会争相把你保护起来——因为你动摇了这个星球的安全系统![3]
RSA安全性
关于此类的帖子到处都是,几乎每篇讲RSA的文章都会说,不再赘述。
在此只做注释,即,RAS的安全性在于,一个足够大的数如何分解质因数,如上即使你破解了C,也知道了N,但是,你如果无法求解出N到底由哪两个数(P和Q),y也就无从知晓,d自然无法求解,然后的然后…仍然后面是凉凉!
(大胆猜测:如果有人实现了一个足够大的数——如主流银行的1024或2048位——如何因式分解的方法,那RSA的安全性就瞬间崩塌了!!你要不要挑战呢?那就从黎曼猜想开始吧!)
其他非对称加密原理也大致如此,只是安全性的机理是其他内容罢了。
写在最后
最后向大家揭秘上面的第一个例子,为什么出现这么神秘的一对数字,加密方和解密方不相同,却可以实现加密与解密。奥秘在于:
91乘11=1001;
73乘137=10001;
11乘9091=100001;
其本质是,加密方和解密方使用的两个算法(乘法),等于原数乘以1,(因为末尾都是1,其余位为0,中间位为0,不影响除了3、4、5位的值),因而实现了非对称加密,是不是觉得非常easy!!
(动脑的小伙伴可以发现类似的许多数:1000001=9001乘101,这样似乎可以为0-999999的数据做此类的非对称加密——思考为什么是从0开始!?)
参考文献:
[1]https://www.bilibili.com/video/BV1GA411s7ZE/
[2] https://www.cnblogs.com/btgyoyo/p/6245618.html
[2.5]https://blog.csdn.net/jijianshuai/article/details/80582187
[3]https://www.bilibili.com/video/BV164411676m?from=search&seid=13745271747718316492
[4]https://www.bilibili.com/video/BV12Z4y1G7rY?from=search&seid=13745271747718316492
[5]https://www.bilibili.com/video/BV1cp4y197AM?from=search&seid=13745271747718316492
[6]https://www.bilibili.com/video/BV1kE411h7ui/?spm_id_from=autoNext
展望
在以后有时间的情况下,下面的内容将会是该篇内容的续集:
(1)RSA中y的求解,即欧拉公式y=(P-1)X(Q-1);
(2)以上算法的编程实现;
(3)判断一个数是否为质数,已经如何分解质因数的暴力求解;
(4)除了RSA的其他非对称加密原理;
(5)尝试构造自己的非对称加密算法[偷笑];
(6)使用动画展示以上过程;
(7)说人话的一篇文章
(8)数学中的“元素周期表”;
(1)非对称加密——RSA——史上最通俗的小白可看懂!相关推荐
- 加密基础知识二 非对称加密RSA算法和对称加密
一.RSA的计算过程 上述过程中,出现了公钥(3233,17)和私钥(3233,2753),这两组数字是怎么找出来的呢?参考RSA算法原理(二) 首字母缩写说明:E是加密(Encryption)D是解 ...
- php封装一个加密算法,PHP封装的非对称加密RSA算法示例
本文实例讲述了PHP封装的非对称加密RSA算法.分享给大家供大家参考,具体如下: 将php的openssl扩展中的非对称加密函数封装成一个Rsa类. 需要注意的是,在windows上,需要打开open ...
- IOS 逆向开发(一)密码学 非对称加密RSA
IOS 逆向开发(一)密码学 RSA 1. 密码学发展简介 2. 非对称加密RSA产生过程 3. RSA 数学原理 3.1 离散对数问题 3.1.1 原根 3.2 欧拉函数Φ 3.3 欧拉定理 3.4 ...
- 【工具编写】python实现非对称加密RSA算法
python实现非对称加密RSA算法 0x01 RSA算法介绍 RSA加密算法是一种非对称加密算法.在公开密钥加密和电子商业中RSA被广泛使用.RSA是1977年由罗纳德·李维斯特(Ron Rives ...
- 零基础,史上最通俗视频编码技术入门
本文引用了微信公众号"鲜枣课堂"的<视频编码零基础入门>文章内容.为了更好的内容呈现,引用和收录时内容有改动,转载时请注明原文来源信息,尊重原作者的劳动. 1.引言 如 ...
- pandorabox mysql_GitHub - gy-games/pandorabox: 基于非对称加密(RSA)的私密信息传递工具,数据由本地客户端进行加密、解密操作。...
PandoraBox | 私密信息传递工具 基于非对称加密(RSA)的私密信息传递工具,数据由本地客户端进行加密.解密操作,密文通过网络进行传输,确保信息的安全性! -- Browse Website ...
- Android加密算法之非对称加密RSA
丨版权说明 :<Android加密算法之非对称加密RSA>于当前CSDN博客和乘月网属同一原创,转载请说明出处,谢谢. 上文<Android加密算法之对称加密AES>提到与对称 ...
- c语言字符串非对称加密,RSA算法C语言实现(支持任意位密钥)
之前分享过三种常用MD5.SHA2和AES加密算法(点这里)实现源码,前三者分别属于哈希加密和对称加密,而另一种很常用的非对称加密RSA算法实现这次分享出来.RSA算法的原理和用途大家可以网上自行搜索 ...
- 非对称加密RSA文本和Excel文件加密练习
package com;import cn.hutool.core.codec.Base64; import cn.hutool.core.io.FileUtil; import cn.hutool. ...
最新文章
- MySQL 学习笔记(12)— 数据类型(定长字符、变长字符、字符串大对象、数字类型、日期时间类型、二进制类型)
- 数据蒋堂 | 倍增分段技术
- 如何分享文件_分布式文件存储系统如何分享文件
- java初始化变量n_java中预构造函数初始化变量的属性
- Mybatis-Plus的SQL语句组拼原理
- VSTO简介及简单使用
- java各种优秀开源库收集
- chm文件打开空白或显示不全
- 低电平译码器LS138设计
- CSS图片上面放文字实现方式
- 【转】MIT博士林达华解说数学体系
- border-radius(使用详解)
- 月薪五万,996真的就像呼吸一样自然吗?
- 连接数据库失败提示hba.conf不符合的处理方法
- 保暖防风又抗冻 春节出游当然要选头戴式耳机
- 家庭新成员:德牧听泉
- 一步一步教你写股票走势图——K线图三(添加均线)
- 如何设计神经网络结构,visio画神经网络结构图
- Python数据库操作【三】—— SQLServer
- ipa在线安装搭建_TF签名如何上架?苹果TestFlight APP如何安装?