Rust : 加密中数论基础知识、RSA加密算法及证明(待续)
待续:还有rust部分待发…
本文有一部分来自:https://blog.csdn.net/flurry_rain/article/details/77970691。特表感谢!
记法
设n为正整数,a和b为整数,若a和b被n除后所得余数相同,
称a和b模n同余,记为a≡b(mod n);或 a≡b(% n)
此式被称为同余式。或表达为:a % n =b % n 或 a mod n =b mod n;若n能整除a则同余式表示为a ≡ 0(mod n)。
欧拉函数
对于正整数N,少于或等于N ([1,N]),且与N互质的正整数(包括1)的个数,记作φ(N)。即欧拉函数。
欧拉定理:
若N>2; a与N互质,则a^(φ(N)) ≡ 1 (mod N )
欧拉函数的性质:
(1) p^k型欧拉函数:若N是质数p(即N=p), φ(N)= φ(p)=p-p^(k-1)=p-1。若N是质数p的k次幂(即N=p^k),φ(N)=p^k-p^(k-1)=(p-1)p^(k-1)。(2) mn型欧拉函数若m,n互质,φ(mn)=(m-1)(n-1)=φ(m)φ(n)。(3) 特殊性质:若n为奇数时,φ(2n)=φ(n)。
费马小定理:
设任意整数a和素数p互素 ,则 a^p-1 ≡ 1(mod p)
运算规则
模运算与基本四则运算有些相似,但是除法例外。其规则如下:
(a + b) % p = (a % p + b % p) % p (1)(a - b) % p = (a % p - b % p) % p (2)(a * b) % p = (a % p * b % p) % p (3)(a^b) % p = ( (a % p)^b ) % p (4)
结合率:
((a+b) % p + c) % p = (a + (b+c) % p) % p (5)((a*b) % p * c)% p = (a * (b*c) % p) % p (6)
交换率:
(a + b) % p = (b+a) % p (7)(a * b) % p = (b * a) % p (8)
分配率:
((a +b)% p * c) % p = ((a * c) % p + (b * c) % p) % p (9)
重要定理
若a≡b (% p),则对于任意的c,都有(a + c) ≡ (b + c) (%p);(10)若a≡b (% p),则对于任意的c,都有(a * c) ≡ (b * c) (%p);(11)若a≡b (% p),c≡d (% p),则 (a + c) ≡ (b + d) (%p),(a - c) ≡ (b - d) (%p),(a * c) ≡ (b * d) (%p),(a / c) ≡ (b / d) (%p); (12)若a≡b (% p),则对于任意的c,都有ac≡ bc (%p); (13)
RSA中重要的推论
m 和 n 是互质的正整数,则:(a^m) %n = ((a%n)^m) %n
推论证明
a^m % n =a*a ^(m-1) %n=(a%n) *(a ^(m-1) %n ) % n //后续不断展开,一直至a ^0,即共有m项=((a%n)^m) %n
推论中举例:
比如:2^3 mod 5= (2 mod 5)^ 3 mod5= 8 mod5= 3
还有:3^3 mod 2
= (3 mod 2) ^3 mod 2
=1^3 mod 2
=1
加密思路:加密本质上是对加密内容的字节数组进行加密。不是对字符的本身进行加密。这样,整数对整数就可以进行相关的变换,即加密了。
比如:"I love Rust,Julia & Python, they are so cool! "的字节数组为:
[73, 32, 108, 111, 118, 101, 32, 82, 117, 115, 116,
44, 74, 117, 108, 105, 97, 32, 38, 32, 80, 121, 116,
104, 111, 110, 44, 32, 116, 104, 101, 121, 32,97, 114, 101, 32, 115, 111, 32, 99, 111, 111, 108, 33, 32]
RSA加密算法为:
(1) 取两个大素数p,q (保密);
(2) 计算 n=p*q (公开), φ(n)=(p-1)*(q-1) (保密);
(3) 随机选取整数e,满足 gcd(e, φ(n))=1 (e与φ(n)互素)(公开);
(4) 计算 d 满足 d*e≡1 (mod φ(n)) (保密); (d为e的逆元,可通过扩展的欧几里得算法进行求解)
(5) {e,n}为公钥,{d,n}为私钥,也可以用{e,d}表示密钥对
(6) m为加密内容(如73),此时c为加密后的密文;加密时 c = m^e mod n 解密时 m = c^d mod n
(7) m为签名内容,签名时c = m^d mod n ;解密时 m = m^e mod n
为什么RSA算法能保证其安全性?
要破解m =>
必须知道 d或e =>
必须知道 φ(n) =>
必须知道 p及q; =>
必须能破解 n=p*q =>
大质数因式分解的难度 => 公认
RSA证明
主要要证明m是否c^d mod n。由c = m^e mod n 。设M =m^e
证式= c^d mod n= (m^e mod n )^d mod n = (M mod n) ^d mod n= M^d mod n //见上面的推论= m^(d*e )mod n ;
因为 d*e≡1 (mod φ(n))
得到:d*e =k *φ(n) +1 ; k是正整数。
上面证式还有,= m^(k *φ(n) +1 ) mod n= m^(k *φ(n))*m mod n // = (m^(k *φ(n))mod n ) *(m mod n) mod n // 乘法 = 1 * m mod n // 由欧拉定理= m证毕。所以解密的公式是对的。
Rust : 加密中数论基础知识、RSA加密算法及证明(待续)相关推荐
- 第76节:Java中的基础知识
第76节:Java中的基础知识 设置环境,安装操作系统,安装备份,就是镜像,jdk配置环境,eclipse下载解压即可使用,下载tomcat 折佣动态代理解决网站的字符集编码问题 使用request. ...
- oracle不属于dml,Oracle中DML基础知识
DML(insert,update,delete) 1.插入数据 insert into 表名(列,列...)values(值,值...) //当插入的数据与表格一一对应时,列可以省略 insert ...
- C语言中重要基础知识的概述
本章主要对于C语言中的基础知识进行一个大致的描述,适合有C语言基础但长久没接触C语言开发的人员进行快速回忆.在总体回忆基础知识之前,先来创建一个C程序.笔者的编译器是visual stduio2013 ...
- 公务员考试中公共基础知识计算机,2012山东省公务员考试公共基础知识最新考试试题库(完整版)...
2012山东省公务员考试公共基础知识最新考试试题库(完整版) 件将会____. A.永远不再发送 B.需要对方再次发次 C.保存在服务商的主机上 D.退回发信人 18.下列部件中,不属于计算机主机内的 ...
- 消防中计算机基础知识,消防基础知识考试题
消防基础知识在生活中有很多,我们应该学习怎样的知识,下面就是学习啦小编为大家整理的消防基础知识方面的考试题相关资料,供大家参考. 消防基础知识考试题 一.选择题(35道题,每题2分,共70分) 1.据 ...
- 公务员考试中公共基础知识计算机,2015山西省公务员考试公共基础知识考试重点和考试技巧...
2015山西省公务员考试公共基础知识考试重点和考试技巧 1.在使用Word文本编辑软件时,要把文章中所有出现的"计算机"都改成"computer",可选择___ ...
- 消防中计算机基础知识,消防设施操作员基础知识计算机基础知识真题及答案解析.doc...
消防设施操作员基础知识计算机基础知识真题及答案解析 模块八计算机基础知识 第1节 项目1 计算机系统的组成与功能 单选题(江南博哥) 1.()是计算机的核心部分. 输入设备 存储器 中央处理器 主板 ...
- 读心术:从零知识证明中提取「知识」——探索零知识证明系列(三)
本文已更新至Githubhttps://github.com/sec-bit/learning-zkp/blob/master/zkp-intro/3/zkp-pok.md 导言:有些理论非常有趣,零 ...
- android des ecb加密_Android逆向 | 基础知识篇 01
常见加密算法 编码 Base64 所有的数据都能被编码为只用65个字符就能表示的文本. 标准的Base64每行为76个字符,每行末尾添加一个回车换行符(\r\n).不论每行是否满76个字符,都要添加一 ...
- 【数论】ACM数论基础知识总结
文章目录 一.质数 1.定义 2.质数的判断 3.质数的筛选 4.质因子分解 5.互质 二.同余 1.模运算 2.同余 3.欧拉定理 4.同余方程 5.同余方程组 6.原根 7.高次同余方程 数论是数 ...
最新文章
- Effective user and Real user
- 省钱方便网上手机充话费
- [转]Java8-本地缓存
- Python并发编程之多进程(一)
- javascript数字验证(转)
- Arraylist线程不安全原因
- 发哥推荐的linux网站,记录一下
- 以中划线开头正则表达式_正则表达式 汉字、数字、字母、横杠
- python na不显示 占位_Python学习之路—Python基础(一)
- 如何将Java Web项目部署到服务器上
- 常用的oracle学习网站
- 全国各省女孩性格+美丽程度比较分析!
- python执行excel公式 语法_Python读取excel文件中带公式的值的实现
- 企小码会话存档使用教程——删人提醒
- 占豪--2010年的市场机会在哪里(兼谈股指期货与楼市)
- 推动线下网吧转型 京东Game+ CEST总决赛圆满落幕
- 帧、关键帧和空白关键帧的作用
- 蓝桥试题集-基础练习-BASIC-18~21-矩阵面积交-完美的代价-数的读法-Sine之舞
- 苹果OFFICE 2011MAC打开WORD字体乱码解决方法
- Java毕设项目教育培训机构信息管理系统计算机(附源码+系统+数据库+LW)