【BUUCTF】Crypto_RSA(铜锁/openssl使用系列)

ops/2024/10/21 9:42:20/

ssl_0">【BUUCTF】Crypto_RSA(铜锁/openssl使用系列)

1、题目

在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17
求解出d作为flga提交

在这里插入图片描述

2、解析

RSA加密过程:
1)选择素数:选择两个不同的大素数,通常记为p和q;
2)计算N:将这两个素数相乘,得到一个大整数N,即N = p * q。(N为RSA的模数)
3)计算欧拉函数φ(N):φ(N) = (p-1) * (q-1)。(欧拉函数φ(N)表示小于N且与N互质的正整数的个数)
4)选择公钥e:选择一个与φ(N)互质的小整数e,通常选择65537(即2^16 + 1),这个值常用因为它只有两个非零位,加速了加密运算。
5)计算私钥d:(e * d) mod φ(N) = 1。(使用扩展的欧几里得算法计算e对于φ(N)的模逆d)

3、编码

#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <iostream>using namespace std;int RSA_D() {// 给定的p、q和e值const char* p_str = "473398607161";const char* q_str = "4511491";const char* e_str = "17";// 将p、q和e转换为BIGNUM类型BIGNUM* p = BN_new();BIGNUM* q = BN_new();BIGNUM* e = BN_new();BN_dec2bn(&p, p_str);BN_dec2bn(&q, q_str);BN_dec2bn(&e, e_str);// 计算N = p * q 和 φ(N) = (p - 1) * (q - 1)BIGNUM* N = BN_new();BN_CTX* ctx = BN_CTX_new();BN_mul(N, p, q, ctx);BIGNUM* phi_N = BN_new();BN_sub(p, p, BN_value_one());BN_sub(q, q, BN_value_one());BN_mul(phi_N, p, q, ctx);// 计算d = e^(-1) mod φ(N)BIGNUM* d = BN_new();BN_mod_inverse(d, e, phi_N, ctx);// 显示d的十进制值char* d_str = BN_bn2dec(d);cout << "d: " << d_str << endl;// 释放资源BN_free(p);BN_free(q);BN_free(e);BN_free(N);BN_free(phi_N);BN_free(d);BN_CTX_free(ctx);return 0;
}int main() {RSA_D();return 0;
}

编译运行:
在这里插入图片描述

4、提交

flag{125631357777427553}

在这里插入图片描述


http://www.ppmy.cn/ops/37614.html

相关文章

24上软考5月新通知:今年可能是最简单的一次

备考24上软考的小伙伴注意啦&#xff01;软考新变动&#xff0c;今年软考高级科目通过率&#xff0c;可能会大增!!! 根据辽宁省软考办最新通知&#xff1a; 一、考试时间&#xff1a;5月25日-26日 解读&#xff1a;早前官方公告2024上半年软考考试时间为5月25日-28日&#xff…

八股Day1 集合

1.List Map Set的区别 2.说下集合继承关系 3.Iterator是什么&#xff1f;基本方法&#xff1f; 4.哪些集合线程不安全&#xff1f;怎么解决的&#xff1f; 5.ArrlyList和Vector的区别 6.ArrlyList和LinedList的区别 7.说下ArrayList的扩容机制 8.Set接口中 Comparator和Compara…

用HAL库改写江科大的stm32入门例子_9-1 串口发送

设置串口&#xff1a; 选项说明&#xff1a; 写一个串口发送函数&#xff1a; // serial send string function void serial_send_string(char *str) {HAL_UART_Transmit(&huart1, (uint8_t *)str, strlen(str), 1000); } main函数中调用发送信息&#xff1a; uint8_t dat…

ROS服务器通信

目录 一、角色 二、流程 注意 三、例子描述 四、srv文件 编译配置文件 vscode配置 五、Server.cpp编写例子 编写CMakeList 六、观察server的效果 七、Client编写例子 编写CMakeList 八、观察Client的结果 九、Client优化&#xff08;动态输入&#xff09; 了解argc…

技术分享 | i.MX8M Mini适配MIPI转eDP芯片

1.方案概述 此方案使用HD-8MMN-CORE的核心板搭配TI公司的芯片SN65DSI86转换芯片实现。 SN65DSI86作为一款MIPI DSI转eDP的芯片&#xff0c;支持双通道DSI输入&#xff0c;最大四通道显示输出&#xff0c;最大支持4K60fps输出&#xff0c;WUXGA 1080P。本方案中将采用单通道DS…

LINUX 入门 5.1

LINUX 入门 5.1 day8 20240503 课程链接地址 第5章 数据库mysql项目实战 mysql基础 第四节&#xff1a; mysql_init(&mysql) NULL失败 mysql_real_connect(&mysql, KING_DB_SERVER_IP, KING_DB_USERNAME, KING_DB_PASSWORD, KING_DB_DEFAULTDB, KING_DB_SERVER_PO…

【JavaEE初阶系列】——Servlet运行原理以及Servlet API详解

目录 &#x1f6a9;Servlet运行原理 &#x1f6a9;Servlet API 详解 &#x1f393;HttpServlet核心方法 &#x1f393;HttpServletRequest核心方法 &#x1f388;核心方法的使用 &#x1f534;获取请求中的参数 &#x1f4bb;query string &#x1f4bb;直接通过form表…

Python项目开发实战:万年历小程序(案例教程)

一、项目概述 万年历小程序是一个基于Python语言开发的实用工具,它可以帮助用户快速查询任意日期的公历、农历、节气、节日等信息。本项目旨在通过实战的方式,深入了解Python语言在GUI(图形用户界面)编程、日期处理以及数据检索等方面的应用。 二、需求分析 1.用户交互:程…