RSA密钥生成-已知p、q、e求私钥d的python脚本
题目:
在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17
求解出d作为flag提交
求解过程:
首先计算n和ϕ(n)
n=p*q ϕ(n)=(p-1)(q-1)
d是e关于模ϕ(n)的乘法逆元,即d⋅e≡1 (mod ϕ(n))
根据扩展欧几里得算法求解d
编写脚本求解:
# 扩展欧几里得算法:用来计算 a 和 b 的最大公约数,同时返回贝祖系数 x 和 y
# 使得 a * x + b * y = gcd(a, b)
def extended_gcd(a, b):
# 基本情况,如果 b == 0,则 gcd(a, b) = a, x = 1, y = 0
if b == 0:
return a, 1, 0
# 递归调用扩展欧几里得算法,获取 gcd(a, b) 和贝祖系数 x, y
gcd, x1, y1 = extended_gcd(b, a % b)
# 更新贝祖系数 x 和 y,返回新的系数
x = y1
y = x1 - (a // b) * y1
return gcd, x, y
# 求解模逆元:即求解 x 使得 a * x ≡ 1 (mod m)
def mod_inverse(a, m):
# 调用扩展欧几里得算法,获取 gcd(a, m), x, y
gcd, x, y = extended_gcd(a, m)
# 如果 a 和 m 不是互质的,说明没有模逆元
if gcd != 1:
raise ValueError(f"{a} 和 {m} 没有互质,无法求模逆元")
else:
# 返回 x 的模 m 结果,即为 a 关于模 m 的逆元
return x % m
# 主函数:根据给定的 p, q 和 e 计算 RSA 私钥 d
def rsa_private_key(p, q, e):
# 计算 RSA 的 n 和 φ(n)
n = p * q # 公钥的模数 n = p * q
phi_n = (p - 1) * (q - 1) # 欧拉函数 φ(n) = (p-1)(q-1)
# 计算 d = e^(-1) mod φ(n),即 e 的模逆元
d = mod_inverse(e, phi_n)
# 返回计算得到的私钥 d
return d
# 给定的 RSA 参数
p = 473398607161
q = 4511491
e = 17
# 调用 rsa_private_key 函数计算私钥 d
d = rsa_private_key(p, q, e)
# 输出计算得到的私钥 d
print(f"私钥 d 的值为: {d}")
RSA密钥生成-已知p、q、e求私钥d的python脚本的更多相关文章
- RSA密钥生成与使用
RSA密钥生成与使用 openssl生成工具链接:http://pan.baidu.com/s/1c0v3UxE 密码:uv48 1. 打开openssl密钥生成软件打开 openssl 文件夹下的 ...
- openssl-0.9.8k_WIN32(RSA密钥生成工具
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha openssl-0.9.8k_WIN32(RSA密钥生成工具
- TZOJ 3209 后序遍历(已知中序前序求后序)
描述 在数据结构中,遍历是二叉树最重要的操作之一.所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问. 这里给出三种遍历算法. 1.中序遍历的递归算法定义: ...
- python应用-已知三角形的边长求他的面积和周长
""" 已知三角形的边长求他的面积和周长 Author:罗万财 Date:2017-3-3 """ import math a=float( ...
- 2019-8-31-C#-已知点和向量,求距离的点
title author date CreateTime categories C# 已知点和向量,求距离的点 lindexi 2019-08-31 16:55:58 +0800 2018-05-08 ...
- C语言:已知三角形三边长求面积
//已知三角形三边长求面积 #include <stdio.h> #include <math.h> int main() { float a,b,c,p,s; int x=0 ...
- RSA密钥生成、加密解密、签名验签
RSA 非对称加密公钥加密,私钥解密 私钥签名,公钥验签 下面是生成随机密钥对: //随机生成密钥对 KeyPairGenerator keyPairGen = null; try { keyPair ...
- windows上RSA密钥生成和使用
一,下载安装windows平台openssl密钥生成工具,执行安装目录bin下的"openssl.exe",执行后弹出命令窗口如下 运行 二,生成私钥 输入"genrsa ...
- poj1190,DFS/已知一个等式,求另一个最小值
7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri, 高度为Hi的圆柱. ...
- C# 已知点和向量,求距离的点
已知一个点 P 和向量 v ,求在这个点P按照向量 v 运行距离 d 的点 B . 已经知道了一个点 P 和他运动方向 v ,就可以通过这个求出距离点 P 为 d 的点 B. 首先把 v 规范化,规范 ...
随机推荐
- 查看GPU支持的CUDA版本
针对的是英伟达GPU.操作步骤如下: 打开NVIDIA Control Panel(NVIDIA控制面板) 可以在搜索里直接搜索,如下图所示: 在打开的控制面板中点击"帮助",如下 ...
- SpringBoot原理深入及源码剖析(二) 自定义Starter及SpringBoot执行原理
自定义Starter SpringBoot starter机制 SpringBoot由众多starter组成(一系列的自动化配置的starter插件),SpringBoot之所以流行,也是因为star ...
- WxPython跨平台开发框架之图标选择界面
在使用 wxPython 开发跨平台桌面应用程序时,创建一个图标选择界面通常用于让用户从图标资源库中选择图标,我们可以把图标分为自定义的图标资源和系统的图标资源两大类,最终我们把它们整合一起使用,在框 ...
- Solution - 「OurOJ #47407」巧立名目
\(\mathscr{Description}\) Private link. 给定一棵含有 \(n\) 个点的带点权树和大小为 \(m\) 的有序点对集合 \(\{(s_i,t_i)\}_{ ...
- w3cschool-Linux shell教程
Shell 教程 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个 ...
- Java常用框架面试题
SpringSpring如何解决循环依赖循环依赖的产生可能有很多种情况,例如: A的构造方法中依赖了B的实例对象,同时B的构造方法中依赖了A的实例对象A的构造方法中依赖了B的实例对象,同时B的某个fi ...
- 微服务测试 Dubbo 接口测试
微服务测试 Dubbo 接口测试 URL:https://blog.csdn.net/qq_35759632/article/details/80832932 微服务测试 ----Dubbo 接口测试 ...
- superset 其他相关设置
重置账号密码: superset fab reset-password --username adminuser --password yourpassword 如 superset fab rese ...
- linux:正则表达式
介绍 一种模式匹配语言,可以使永远筛选数据以查找特定的内容,可以应用在vim.grep.less.perl.python中 基础 .(点) 匹配除 \n 之外的任何单个字符,若要匹配包括 \n ,则应 ...
- Git的一些基本用法
本文分享自天翼云开发者社区<Git的一些基本用法>,作者:l****n 基本操作 git branch 查看当前分支 git branch -a 查看所有分支 git pull 更新当前分 ...