密码学第三周
1.安装VMware
进入VMware官网,选择workstation pro
下载VMware Workstation 17 Pro
打开下载好的.exe文件,安装
选择安装位置
开始安装
安装成功后,输入许可证密钥
下载安装成功。
虚拟kali系统环境
进入官网下载kali
利用VMware虚拟环境
选择kail下载所在地址
命名虚拟机,选择位置
开启虚拟机,准备安装
输入用户名
设定密码
对磁盘进行分区
软件选择
安装GRUB启动引导器
安装成功
2.ctf-show rsa
baby rsa1
已知e,p,q,c
n=p*q得到n,RSA基础题型解密得解。
phi_n = (p-1)*(q-1)#最小公倍数
d = gmpy2.invert(e,phi_n)#求逆元
m = pow(c,d,n)#c^d mod n
print(libnum.n2s(int(m)))#数字转字符串
easy rsa1
已知e,n,c
利用factordb.com分解得p,q
即rsa基础题型求解
easy rsa2
观察数据,e相同,已知n1,c1,n2,c2
可得为变式题型n不互素
q=gmpy2.gcd(n1,n2)#gcd(x,y)求x,y最大公约数
p1=n1//q
phi_n=(q-1)*(p1-1)
d1=libnum.invmod(e,phi_n)#对e模phi_n取反
m=pow(c1,d1,n1)
print(libnum.n2s(int(m)).decode())#decode()字节转字符串
easy rsa3
观察数据,n相同,已知e1,c1,e2,c2
可得为变式题型共模攻击
s1,s2,s3=gmpy2.gcdext(e1,e2)#扩展欧几里得原理
m=(pow(c1,s2,n)*pow(c2,s3,n)%n)
easy rsa4
观察数据,e=3,已知n,c
可得为变式题型低加密指数攻击,k比较小
def de(c,e,n):
k=0
while True:
m=c+n*k
result,flag=gmpy2.iroot(m,e)#开方
if True == flag:
return result
k+=1
m=de(c,e,n)#解密
easy rsa5
已知e,n,c
利用factordb.com分解得p,q
即rsa基础题型求解
3.凯撒密码脚本
大写字母A至Z对应的十进制ASCII编码为65至90,小写字母a至z对应的十进制ASCII编码为97至122
ord() :将字符转换为了对应的 ASCII 值
chr(): 将对应的值转换为字符
取模运算: 将一个数整除另一个数得到的余数,余数即模运算的值
加密脚本
大小写分别偏移
str=input("请输入明文:")
n=int(input("请输入密钥:"))#偏移量
str_encrypt=""
for letter in str:#循环,遍历字符串
if letter==" ":
letter_encrypt=" "#空格不变
elif 'a' <= letter <= 'z':#小写字母
str_encrypt += chr(ord('a') + ((ord(letter) - ord('a')) + n) % 26)#利用ASCLL码完成字母偏移
elif 'A' <= letter <='Z':#大写字母
str_encrypt += chr(ord('A') + ((ord(letter) - ord('A')) + n) % 26)
print("密文为:",str_encrypt)
偏移
str=input("请输入明文:")
n=int(input("请输入密钥:"))
str_encrypt=""
for letter in str:
if letter==" ":#空格不加密
letter_encrypt=" "
else:
letter_encrypt=chr((ord(letter)-ord("a") +n) %26 +ord("a"))
str_encrypt += letter_encrypt
print("密文为:",str_encrypt)
解密
str=input("请输入密文:")
n=int(input("请输入密钥:"))#相同的密钥解密
str_decrypt=""
for word in str:
if word==" ":
word_decrypt=" "
else:
word_decrypt=chr((ord(word)-ord("A") -n) %26 +ord("A"))
str_decrypt = str_decrypt+word_decrypt
print("明文为:",str_decrypt)
4.数论学习1
A.一些基础概念:
合数<=>素数
整除:a|b :b能被a整除,a叫做b的约数(因数)
公约数(公因数)
互质:公约数只有1的两个数
同余:给定一个正整数m,如果两个整数a和b满足a-b能够被m整除,即(a-b)/m得到一个整数,那么就称整数a与b对模m同余,记作a≡b(mod m)。对模m同余是整数的一个等价关系
B.常见符号:
mod,要与一般的%相区分
mod意为模意义下结果一定为正
%是一种运算,结果可以为负
同余符号(≡)两个整数a,b,如果a mod m = b mod m则称a,b对于模m同余,记作a ≡ b ( mod m )
求和符号 sigma(Σ )
求积符号 Π
μ 莫比乌斯函数
φ 欧拉函数:小于n的正整数中与n互质的数的数目
整除符号 x|y,表示x整除y,即x是y的因数
gcd(x,y):代表x和y的最大公约数,也可写作(x,y)
lcm(x,y):代表x和y的最小公倍数,也可写作[X,Y]
C.模运算:
基本性质:
(1)若p ∣ ( a − b ) ,则a ≡ b ( % p )
(2)( a % p ) = ( b % p ) 意味a ≡ b ( % p )
(3)对称性:a ≡ b ( % p )等价于b ≡ a ( % p )
(4)传递性:若a ≡ b ( % p ) 且b ≡ c ( % p ) ,则a ≡ c ( % p )
运算规则:
(a+b)%p=(a%p+b%p)%p
( a − b ) % p = ( a % p − b % p ) % p
( a ∗ b ) % p = ( a % p ∗ b % p ) % p
(a^b )%p=((a%p) ^b )%p
结合律
交换律
分配率
定理:
若a ≡ b ( % p ) ,则对于任意的c,都有( a + c ) ≡ ( b + c ) ( % p ) ;
若a ≡ b ( % p ) ,则对于任意的c,都有( a ∗ c ) ≡ ( b ∗ c ) ( % p ) ;
若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 );
若a ≡ b ( % p ),则对于任意的c,都有ac ≡ bc ( % p );