可以先看看这个视频: RSA_Encryption_Algorithm

公开密钥

Perwork:
私钥:Sender和Receiver预先约定加密和解密方案,向其他人保密。

这个实现比较难:向其他人保密。假如你是个商家,很多人要和你联络,发送者可能和你一点关系也没有,怎么保密。

需求:Sender素不相识,发送消息需求保密,加密方案必须公开。【就和信箱一样,所有人都可以向你公开的的信箱里投信件,但是只有你才有钥匙(私有的)取信件】

公钥:加密方案向所有人公开,解密方案只有Receiver知道,对其他所有人(包括Sender),Sender和除Receiver外所有人都是平等的,【Sender把信件放入Receive信箱了,Sender就不能再看到信件内容啦】

这就要求加密很容易,但是解密很难的算法!从跳板里跳入水里容易,想跳回去就不是那么容易啦。

先用一下示例讲下流程:


1. 定义一个信息集合

Zset={0,1,2,3,...90}.

这个就是相当于26个英文字母,只要知道这26个字母,你就可以拼出任何想要的信息,只是我们把26个扩展为了91个。

2. Sender 要发送的信息为

%%现实生活中:
Msg = ”晚上一起吃饭”;
%%等价为信息集合里是:只要Reciver得到的内容最终为{1,2,3,4,5,6}就可以知道是现实的“晚上一起吃饭”
Msg ={1,2,3,4,5,6};

这里的Msg就是一个明文。

3. Sender 把信息编码为明文后,还要进行加密!

把明文的每一个元素都映射为另一个唯一的值(密文:可以公开的值)

%%明文
Msg = {1,2,3,4,5,6};
%%使用加密:C = A^5(mod 91)
%%A^5 -->
NewMsg = {1,32,243,1024,3125,7776}
%%mod 91 对91取余得到密文
NewMsg = {1,32,61,23,32,41};

简单来说:加密过程为:

%%  明文             公式:5次方后对91取余         密文
A -------------> A

5

 mod 91 -------------->C

最后的保证:A和C绝对是一对一映射关系。

Question1: 那么这个密文怎么保证不被破解呢?

我们试下从这公开的加密公式和密文反推之

可以看出,通过穷举,我们还是可以得到结果的,但这个计算次数也是指数增长的,且计算开根号得整数操作很要耗时,

一个算法最后逼得人只能用穷举来解密,那么就是成功啦,

思考:如果公式里面不是5次方,而是三位数,四位数的次方,那计算量就更大。

3 . sender把这密文发给Receiver 加密工作完成

4. 解密:Receive知道信息比Sender多的就是这个91是怎么来的,这个是关键。

4.1 91 = 7*13 (实现应用中,会设定为2个非常大的素数相乘,让Sender看不出是哪2个素数来,我们为了演示简单,假定Sender不会得到91=7*13这个结果,只有Receiver知道)

这个算法就是利用了这一点:2个素数乘积的结果很容易,但是想反过来把结果反推为哪2个素数相乘很难。所有公开密钥都是正着做容易,反过来就是很难

4.2 根据费马小定理:和辗转相除法可以得到:

5d = 1+(13-1)*(7-1)*k

从以上可以“容易穷举出一个”k=2时 :5*29 = 1+(13-1)*(7-1)*2

4.3 接着我们对密文C再乘29次方后对91取余就可以直接得到明文啦

你只要知道那个29,就可以得到破解啦!!!!!

是不是很神奇!!!!!!当然我们还是有很多迷惑的,比如:

为什么选5,91,这些数字有什么要求?接下来,我们先理一下上面的步骤:

步骤 示例
取2个大质数:p,q p=7,q=13
密钥:n=p*q,h 是一个与(p-1)(q-1)互质的数, 公开n 和 h ,p,q不公开 n =91,h = 5(与72互质)
加密(公开)C = Ah (mod n) A = 明文,h=5,n=91,C= 密文
解密(保密)hd = 1+(p-1)(q-1)k---->A = C d mod 91 5d = 1+72*k, 当k=2时,d=29成立
解密完成 密文乘方29 再对91取模 得到明文

原理证明 :

1. 取2个很大的不相等的质数p,q ;

2. m = p*q

3. 根据欧拉函数:比m小的质数个数r = φ(N) = φ(p)*φ(q) = (p-1)*(q-1)

4. 选取一个与R互质的数e

5. 根据欧几里德(辗转相除)定理:2个互质的数一定满足:e*x – r*y =1;

6. 上式等价为: e*d – r*k = 1;

7.密文c ,明文a , 加密 a e = c (mod m);

8. 解密: c d = a (mod m),这个结论是 我们要证明的,

9. cd = ae*d = a 1+r*k =a*a r*k

所以只要证明: a*a r*k = a(mod m) ---->a r*k = 1 (mod m)

10 .根据费马小定理:

:

a r*k = (a k)r = 1 (mod m).


数学真有意思…….

[数学趣味001]RSA算法原理及示例的更多相关文章

  1. RSA算法原理——(2)RSA简介及基础数论知识

    上期为大家介绍了目前常见加密算法,相信阅读过的同学们对目前的加密算法也算是有了一个大概的了解.如果你对这些解密算法概念及特点还不是很清晰的话,昌昌非常推荐大家可以看看HTTPS的加密通信原理,因为HT ...

  2. RSA算法原理

    一直以来对linux中的ssh认证.SSL.TLS这些安全认证似懂非懂的.看到阮一峰博客中对RSA算法的原理做了非常详细的解释,看完之后茅塞顿开,关于RSA的相关文章如下 RSA算法原理(一) RSA ...

  3. SSH原理与运用(一)和(二):远程登录 RSA算法原理(一)和(二)

    SSH原理与运用(一)和(二):远程登录  RSA算法原理(一)和(二) http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html ht ...

  4. (转)RSA算法原理

    RSA算法原理(二)   作者: 阮一峰 日期: 2013年7月 4日 上一次,我介绍了一些数论知识. 有了这些知识,我们就可以看懂RSA算法.这是目前地球上最重要的加密算法. 六.密钥生成的步骤 我 ...

  5. (转) RSA算法原理(一)

    最近用到了RSA加密算法,虽然有现成的,但是想看看它的原理,翻到此文,感觉写得很好,通俗易懂,转了.   作者: 阮一峰 日期: 2013年6月27日 如果你问我,哪一种算法最重要? 我可能会回答&q ...

  6. 阮一峰:RSA算法原理(一)

    今天看到一篇好文章,关于加密算法,收藏了觉得不过瘾,还是自己贴一遍,也能加深一下印象. 原文链接:http://www.ruanyifeng.com/blog/2013/06/rsa_algorith ...

  7. RSA算法原理(一)

    如果你问我,哪一种算法最重要? 我可能会回答"公钥加密算法". 因为它是计算机通信安全的基石,保证了加密数据不会被破解.你可以想象一下,信用卡交易被破解的后果. 进入正题之前,我先 ...

  8. [转] 带你彻底理解RSA算法原理

    http://blog.csdn.net/dbs1215/article/details/48953589 1. 什么是RSA RSA算法是现今使用最广泛的公钥密码算法,也是号称地球上最安全的加密算法 ...

  9. 【来龙去脉系列】RSA算法原理

    如果你问我,哪一种算法最重要? 我可能会回答"公钥加密算法". 因为它是计算机通信安全的基石,保证了加密数据不会被破解.你可以想象一下,信用卡交易被破解的后果. 进入正题之前,我先 ...

随机推荐

  1. 核主成分分析(Kernel Principal Component Analysis, KPCA)的公式推导过程

    KPCA,中文名称”核主成分分析“,是对PCA算法的非线性扩展,言外之意,PCA是线性的,其对于非线性数据往往显得无能为力,例如,不同人之间的人脸图像,肯定存在非线性关系,自己做的基于ORL数据集的实 ...

  2. vue+uwsgi+nginx部署项目

    首先先下载好前后端项目 先从前端vue搞起 要在服务器上,编译打包vue项目,必须得有node环境 下载node二进制包,此包已经包含node,不需要再编译 wget https://nodejs.o ...

  3. Android Studio 无法预览布局问题:com/android/util/PropertiesMap

    应该是API版本太高,换成较低的就好了 API24,无法预览 换成22就没事了 Android Studio要比Eclipse好用很多,虽然Eclipse现在可以直接安装Android开发板,但AS界 ...

  4. Netty面试题

    1.BIO.NIO和AIO的区别? BIO:一个连接一个线程,客户端有连接请求时服务器端就需要启动一个线程进行处理.线程开销大. 伪异步IO:将请求连接放入线程池,一对多,但线程还是很宝贵的资源. N ...

  5. GNU/Linux LVM 原理图释

    逻辑卷管理器(英语:Logical Volume Manager,缩写为LVM),又译为逻辑卷宗管理器.逻辑扇区管理器.逻辑磁盘管理器,是Linux核心所提供的逻辑卷管理(Logical volume ...

  6. 虚拟化 - kvm安装

    vmware centos6.5 64位 kvm虚拟化安装配置 安装 centos 64位 1.推荐配置 内存 2G 硬盘50G,或者再单独分一个磁盘,用来存储虚拟机文件 最关键的一步,在创建虚拟机时 ...

  7. Spring Boot启动流程详解

    注:本文转自http://zhaox.github.io/java/2016/03/22/spring-boot-start-flow 环境 本文基于Spring Boot版本1.3.3, 使用了sp ...

  8. ubuntu下使用sdk manager 安装sdk 其他版本

    在终端运行SDK Manager 的脚本 sdk目录下的tools目录下的 android 脚本 就能打开sdk manager界面进行选择安装了.

  9. flutter 交互提示方式

    交互提示方式dialog和snackbar 首先看看dialog的方式 new PopupMenuButton( icon: new Icon(Icons.phone_iphone, color: C ...

  10. 【301】IDL与C#混合编程

    目录: 一.COM_IDL_CONNECT 1. 添加组件 2. 组件初始化 3. 功能调用 4. 数据传递 二.IDLDrawWidget组件 C# (C Sharp)是微软公司在2000年6月发布 ...