密码前三题(2024期中考)

1.RSA:

import gmpy2
from Crypto.Util.number import long_to_bytes


n=703739435902178622788120837062252491867056043804038443493374414926110815100242619
p=782758164865345954251810941
q=810971978554706690040814093
r=1108609086364627583447802163
e=59159
c=449590107303744450592771521828486744432324538211104865947743276969382998354463377
n=p*q*r

phi=(p-1)*(q-1)*(r-1)
d=gmpy2.invert(e,phi)
m=pow(c,d,n)

print(long_to_bytes(m))

由题目可以知道,这是简单的求m,先将n分解成成两个质数,但是发现分解为三个质数,改变一下脚本,加入元素r,即可

2.RSA算法的密钥生成过程如下:

  1. 随机生成两个大素数p和q。
  2. 计算n = p * q。
  3. 计算欧拉函数φ(n) = (p - 1) * (q - 1)。
  4. 选择一个整数e,满足1 < e < φ(n)且e与φ(n)互质(即最大公约数为1)。
  5. 计算d,满足d * e ≡ 1 (mod φ(n)),即d是e关于φ(n)的模反元素。
  6. 公钥为(n, e),私钥为(n, d)。

加密过程如下:

  • 使用公钥(n, e)对明文m进行加密,得到密文c = me mod n。

解密过程如下:

  • 使用私钥(n, d)对密文c进行解密,得到明文m = cd mod n。

由于e和d是互逆的,所以如果知道了n和e,就可以通过扩展欧几里得算法计算出d,从而得到私钥。但是,这个计算过程是单向的,即从公钥直接求出d是不可能的,除非使用暴力破解的方法,即尝试所有可能的d值,直到找到满足条件的那个d。这种方法在n足够大时是不可行的,因为计算量非常大。

因此,已知公钥求私钥是不可行的,除非你知道p和q,否则你无法从公钥计算出私钥。

3.代码分析:

  1. 导入库
    • import gmpy2: 导入gmpy2库,这是一个用于大整数运算和高精度计算的Python库。
    • from Crypto.Util.number import long_to_bytes: 从Crypto.Util.number模块中导入long_to_bytes函数,该函数用于将长整数转换为字节串。
  2. 变量定义
    • n, p, q, r, e, c: 这些变量分别代表RSA加密中的模数、三个素数、公钥指数和密文。
  3. 计算n
    • n = p * q * r: 这里重新定义了n,使其为三个素数的乘积。在标准的RSA中,n通常是两个大素数的乘积。
  4. 计算欧拉函数phi
    • phi = (p-1) * (q-1) * (r-1): 欧拉函数用于计算与n互质的正整数的个数。在多素数RSA中,这是正确的计算方法。
  5. 计算私钥d
    • d = gmpy2.invert(e, phi): 使用gmpy2库的invert函数来计算ephi的模逆元,即私钥d。在RSA中,这是通过满足e * d % phi == 1来确保的。
  6. 解密
    • m = pow(c, d, n): 使用模幂运算进行解密。将密文cd次方对n取模,得到原始明文m
  7. 转换并打印明文
    • print(long_to_bytes(m)): 将解密后的长整数m转换为字节串,并打印出来。如果m是一个可打印的字符串或文本,这将显示其内容。

作用

  • 该脚本的主要作用是解密一个基于RSA(但使用三个素数)加密的密文c,并输出解密后的明文。

4.RSA2

知道了公钥和密文,即n,e,c

大概是求明文或者d,m

先进行质数分解,网站,factordb.com

得到p,q,接下来可以求d,

在Linux里面中弄,

先下载rsatool,后下载gmpy2

安装gmpy2,需要的依赖库 gmp mpfr mpc


gmp 库安装
apt-get install libgmp-dev

mpfr 库安装
apt-get install libmpfr-dev

mpc 库安装
apt-get install libmpc-dev

pip安装
apt-get install python3-pip
gmpy安装

将密文复制到kali,文件名为enc,用openssl解base64

openssl enc -base64 -d -in enc.b64 -out flag.enc

-base64:利用base64编码或解码

-d :解码(decode),默认为编码(encode)

- in enc.b64 :这里代表经base64编码密文

- out flag.enc  :输出为flag.enc

openssl rsautl -decrypt -in flag.enc -inkey pen.pem -out flag.txt

这个命令使用 openssl 的 rsautl 子命令来解密一个使用 RSA 私钥加密的文件

-decrypt  :进行解密

- in flag.enc  :引入密文

-inkey open.pem  :私钥

-out flag.txt  :输出文件尾flag.txt

得到flag

5.签到题

一搜,发现是unicode转换ascll

字符解码

发现是一个base64

最后得到flag

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值