攻防世界:Crypto习题之easy_RSA

RSA 加密

在非对称加密算法中,单向函数被广泛应用,用于确保从公钥加密后的密文无法轻易推导出私钥,从而保证数据的安全性。而其中最著名的算法便是 RSA 加密算法。

首先设 $$\varphi(m) := | { 1 \leq k \leq m |\gcd(k, m) = 1 } |$$ 为欧拉函数(Euler'sche Phi-function)。

RSA加密算法的流程如下:

  1. 选择2个很大的质数\(p, q\).
  2. 计算\(n:=pq\)。这里的n是公开的,\(p, q\)则是保密的。
  3. 计算\(\varphi(n)\)。(因为我们知道\(n=pq\),且\(p, q\)均为质数,我们可以利用公式\(\varphi(n)=(p-1)(q-1)\)进行快速计算。)
  4. 选择\(e \in \{1,2,...,\varphi(n)-1\}\),使得\(gcd(\varphi(n),e)=1\).

    我们的公钥为\((e,n)\)。
  5. 计算密钥\(d\),满足\(ed \equiv 1\) mod \(\varphi(n)\).

假设我们现在有明文x以及公钥\((e,n)\),进行加密时只需要计算

\[b=a^e \text{ mod } n, \ \ \ \ a,b \in \mathbb{Z}_n.
\]

而解密时同理

\[a=b^d \text{ mod } n.
\]

如此一来,任何人都可以将一段信息加密后发送给我们,而只有我们能够解密这段信息。

题目内容

https://adworld.xctf.org.cn/challenges/list



思路

在进行第5步计算密钥\(d\)时,可以考虑以下算法:

(1). 用扩展欧几里得算法找到 \(x\) 和 \(y\),使得:

\[e \cdot x + \varphi(n) \cdot y = 1,
\]

(2). 上式中,\(x\) 模 \(\varphi(n)\) 的值即为 \(d\):

\[d \equiv x \bmod \varphi(n).
\]

如果 \(d < 0\),需要将其调整到正数范围:

\[d = d + \phi(n).
\]

代码

p=473398607161
q=4511491
e=17 # 扩展欧几里得算法
def extended_euclidean(a, b):
if b == 0:
return a, 1, 0
gcd, x1, y1 = extended_euclidean(b, a % b)
x = y1
y = x1 - (a // b) * y1
return gcd, x, y def calculate_private_key(p, q, e):
phi = (p - 1) * (q - 1)
gcd, x, y = extended_euclidean(e, phi)
if gcd != 1:
raise ValueError("e and phi(n) are not coprime")
d = x % phi
if d < 0:
d += phi
return d d = calculate_private_key(p, q, e)
print(f"私钥 d 是: {d}")
# 输出结果应为“私钥 d 是: 125631357777427553”

攻防世界:Crypto习题之easy_RSA的更多相关文章

  1. CTF -攻防世界-crypto新手区(5~11)

    easy_RSA 首先如果你没有密码学基础是得去恶补一下的 然后步骤是先算出欧拉函数 之后提交注意是cyberpeace{********}这样的 ,博主以为是flag{}耽误了很长时间  明明没算错 ...

  2. 攻防世界 - Crypto(一)

    base64: 根据题目base64可知编码方式,下载附件发现是一个txt文件,把内容用工具解码就彳亍了,即可得到flag, flag: cyberpeace{Welcome_to_new_World ...

  3. 攻防世界-Crypto高手进阶区部分Writeup

    1.flag_in_your_hand && flag_in_your_hand1 下载,解压后 打开index文件,直接点击get flag错误,输入其他点击也同样 打开js文件,在 ...

  4. 攻防世界CRYPTO新手练习

    0x01 base64 直接base64 Decode 得到flag cyberpeace{Welcome_to_new_World!} 0x02 Caesar key为12 的恺撒密码,解密德fla ...

  5. CTF -攻防世界-crypto新手区(1~4)

    题目已经提示用base64直接解密就行 base64解密网址 http://tool.oschina.net/encrypt?type=3 题目提示是凯撒密码 http://www.zjslove.c ...

  6. Xctf攻防世界—crypto—Normal_RSA

    下载压缩包后打开,看到两个文件flag.enc和pubkey.pem,根据文件名我们知道应该是密文及公钥 这里我们使用一款工具进行解密 工具链接:https://github.com/3summer/ ...

  7. RSA脚本环境配置-攻防世界-OldDriver

    [Crypto] 题目链接 [RSA算法解密] 审题分析 首先拿到一个压缩包,解压得到文件enc.txt. 先不用去管其他,第一眼enc马上联想到 RSA解密.接着往下看 [{"c" ...

  8. 攻防世界 reverse evil

    这是2017 ddctf的一道逆向题, 挑战:<恶意软件分析> 赛题背景: 员工小A收到了一封邮件,带一个文档附件,小A随手打开了附件.随后IT部门发现小A的电脑发出了异常网络访问请求,进 ...

  9. CTF--web 攻防世界web题 robots backup

    攻防世界web题 robots https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=506 ...

  10. CTF--web 攻防世界web题 get_post

    攻防世界web题 get_post https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5 ...

随机推荐

  1. Asp.net core 学习笔记 dotnet & azure 常用 command

    更新: 2021-08-26 最近试了一下 vs 2022 结果 .net cli 也自动升级到 .net 6 preview 版本, 害我 dotnet new 的时候出来一个 .net 6 tem ...

  2. CodeMaid:一款基于.NET开发的Visual Studio代码简化和整理实用插件

    前言 今天大姚给大家分享一款由.NET开源.免费.强大的Visual Studio代码简化.整理.格式化实用插件:CodeMaid. 工具介绍 CodeMaid是一款由.NET开源.免费.强大的Vis ...

  3. Linux_权限理解(详细PLUS)

    1.用户 Linux下有两种用户:超级用户(root)和普通用户: 超级用户:可以再linux系统下做任何事情,不受限制 普通用户:在linux下做有限的事情 超级用户的命令提示符是"#&q ...

  4. Linux:/proc/meminfo参数详细解释

    Linux:/proc/meminfo参数详细解释 一.Linux内存总览图 二.meminfo参数的详细介绍 /proc/meminfo是了解Linux系统内存使用状况的主要接口,我们最常用的&qu ...

  5. SURF (Speeded Up Robust Features,加速稳健特征)

    本篇文章来自wikipedia,如果需要阅读英文,可以去看一下. SURF (Speeded Up Robust Features, 加速稳健特征) 是一个稳健的图像识别和描述算法,首先于2006年发 ...

  6. Java日期时间API系列35-----Jdk8中java.time包中的新的日期时间API类应用,微秒和纳秒等更精确的时间格式化和解析。

    通过Java日期时间API系列1-----Jdk7及以前的日期时间类中得知,Java8以前除了java.sql.Timestamp扩充纳秒,其他类最大只精确到毫秒:Java8 time包所有相关类都支 ...

  7. C# 的浮点类型 float double 和十进制类型 decimal

    // 浮点型数据 float double(双精度) // float f = 1.1; // ps:写小数的时候只要后面没有加上 f/F 默认是double类型 // 正确的定义 double d ...

  8. modbus基础

    Modbus是一种单主站的主从通信模式,Modbus只能有一个主站,允许多个从站(0-247):从站之间不能交流:主站发送数据,从站应答: 一主多从 : 1. 地址码,表,功能码 地址码一般是Modb ...

  9. maven的pom.xml基础配置

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

  10. 怎么封装axios

    首先,单独创建一个request的js文件,导入axios 然后,创建 axios 实例 request = axios.create 可以写基本地址,超时时间等: 后面可以添加拦截器,可以在请求拦截 ...