环境配置
### python3 下载
https://www.python.org/downloads/windows/
### sagemath下载
https://mirrors.aliyun.com/sagemath/win/index.html
### sagemath在线网站
https://sagecell.sagemath.org/
## python rsa安装常用的库
安装 libnum 库
pip install libnum
安装 pycryptodome库 Crypto
pip install pycryptodome -i https://pypi.mirrors.ustc.edu.cn/simple/
安装 gmpy2库
pip install gmpy2 -i https://pypi.mirrors.ustc.edu.cn/simple/
安装 sympy库
pip install sympy -i https://pypi.mirrors.ustc.edu.cn/simple/
前置知识
明文 m:就是待加密的文本啦,一般也就是我们的flag。
密文 C:加密完成后的密文,一般题目会给你,我们要做的就是根据密文解密出明文。
公钥 e(加密钥):用来加密的密钥,是一个整数,是公开的。
两个大素数 p,q:RSA加密的关键部分,一般不会告诉你。我们选取两个大素数并计算它们的乘积,得到n=p*q。后面会用p,q,n来加密解密。由于p,q非常大,想要对n进行因式分解得到p,q非常困难,这也确保了RSA的安全性。
私钥 d(解密钥):用来解密,一般不会告诉你,d满足e*d mod (p-1)(q-1)=1,所以我们只要知道e和p,q就可以把d算出来。
数论基础
欧几里得算法
欧几里得算法是数论中最基本的一个技巧,它可以简单地求出两个正整数的最大公因子。首先,我们需要一个简单的定义:两个整数是互素的,当前仅当它们只有一个正整数公因子1。
对于整数a,b,c,用gcd(a,b)表示a与b的最大公因子。存在gcd(a,b)=c,则称a与b的最大公因子为c,另外gcd(0,0)=0
例子
gcd(60,24)=12
gcd(17,16)=1
模的运算
若a是一个整数,n是一个正整数,则定义a除以n所得的余数为a模n。整数n称为模数。
若(a mod n) = (b mod n),则称整数a和b是模n同余的,表示为a ≡ b(mod n)
同余性质
- 若a|(a-b),则a ≡ b(mod n)
- 若a ≡ b(mod n),则b ≡ a(mod n)
- 若a ≡ b(mod n),b ≡ c(mod n),则a ≡ c(mod n)
欧几里得算法回顾
欧几里得算法基于下面的定理:对任意整数a,b,且a ≥ b ≥ 0,有
gcd(a,b) = gcd(b,a mod b)
例子gcd(55,22) = gcd(22,55 mod 22) = gcd(22,11) = 11
扩展欧几里得算法
扩展欧几里得算法是欧几里得算法(又叫辗转相除法)的扩展。已知整数x,y,扩展欧几里得算法可以在求得x,y 的最大公约数的同时,能找到整数s、t(其中一个很可能是负数),使它们满足贝祖等式: sx+ty=gcd(x,y) 。
扩展欧几里得算法可以用来计算模反元素(也叫模逆元)。
定义:设m是一个正正整数,a是一个整数,如果存在整数 b使得ab ≡ 1(mod n),成立,则a叫做模n的可逆元,b叫做模n逆元。在模m的意义下(即n的完全剩余系中)b存在且唯一。
费马定理和欧拉定理
费马定理
若p是素数,a是正整数且不能被p整除,则
≡ 1(mod p)
费马的另一种表现形式为
≡ a(mod p)
欧拉函数
先引入一个概念f(n),f(n)是指小于n且与n互素的正整数个数。
简单翻译一下
一个整数n,在[1,n]的集合中与n互质数的个数。
对于质数p,有f(p) = p - 1
假设有两个质数p和q,p ≠ q ,n = pq,则有
f(n) = f(pq) = f(p)f(q) = (p - 1)(q - 1)
关于f(n) = f(p)f(q)证明
#关于f(n) = f(p)f(q)证明
#考虑小于n的正整数集合{1,...,(pq-1)}
#不与n互素的集合{p,2p,...,(q - 1)p}和{q,2q,...,(p - 1)q},之所以得出这个结果,是因为任何数能够整除n的整数都必须整除素数p或q;此外,这两个集合是非重叠的:因为p和q都是素数,我们发现第一个集合中不存在一个为q的整数倍的数,第二个集合不存在一个为p的整数倍的数。因此两个集合中共有(q - 1)(p - 1)个整数,所以
f(n) =(pq - 1) - [(q - 1) + (p - 1)]
f(n) =pq - (p + q) + 1
f(n) =(p - 1)(q - 1)
f(n) =f(p)f(q)
欧拉定理
欧拉定理说明,对任意互质的a和n,有
≡ 1(mod n)
中国剩余定理
这里推一篇文章,我就不解释了
离散对数
初等数论笔记(7):离散对数和指数的算术 - 知乎 (zhihu.com)
本人某时做的笔记
本人只是个菜鸡,勿喷,喜欢的话可以点点关注,点点赞