2025能源網絡安全大賽CTF --- Crypto wp

文章目錄

    • 前言
    • simpleSignin
    • NumberTheory

前言

大半年以來寫的第一篇文章!!!
在這里插入圖片描述

simpleSignin

題目:

from Crypto.Util.number import *
from gmpy2 import *
import osflag = b'xxx'
p = next_prime(bytes_to_long(os.urandom(128)))
q = next_prime(bytes_to_long(os.urandom(128)))
r = next_prime(q)
n = p * q * r
e = 0x10001
print(f"n = {n}")
print(f"c = {pow(bytes_to_long(flag), e, n)}")
print(f"gift1 = {p % (2**10)}")
print(f"gift2 = {(p >> 20) % 2 ** 800}")
# n = 91717197306065801430692774296739087369692505805873730729014813677164858033475119219496549179322145782790263228034134781592967028480301579462111507372893508636592832600206391905790511488678949157112322777098684707325311891056750963286494634489093620270797637437274546909400418496263799669541769586017282231886023275686719495040493703402244867906367008837217453500300992995258096509545406775279177918160331853363991834113918051468978309081085686108283547874975768959542753094631595260890420558364636303078263220001513817844063960023424429484568985727987064710176511050208253838039386390968276801658300795687804601169987051671314061987254212363117325786734328360418591971610392966867659045907550755979167652038093091970078722854251659581538266806207906127491377972897441916942048136016416739633568604447564119372465662628724153812001753748410162478969725179843125714619352895967577899670208386148053595763674920185320834513587
# c = 53725206995000716522893276595058419071990290621803579636161714383330892673055811337947487241701642126496591685585109862245420917684160662867863785840324861826954623093740844326627026833476771622577100464186879804184565843869885634004202583123814660253474988365767802371596929119773493402264073966760818738577604694066757843772483509464516822006312737285138313587227005339175914335841617310097530993158296079585719772401849963001042345007495440110071538584261056055469925721208755935971137618873034799819342505088130217626174789908762309465751064851354313099531229991764250968313733026934453793364342598912519963653648573385780950148182927905527658001218917373163825532068287661941387464083148002185635404194796699532320249403305428191157038659625440168989244227207215946636349083290983113055351713899941081154804665455470002453942340935361232121886299764516109079270616076269084847241248414373185392810503507977061708566426
# gift1 = 513
# gift2 = 5077110719426498428662246006638349628986894614097694065336047422264042823893900747327210766546701290926253205743419412459378571920759093322149140413682875156857171051511499793127787270654329155934268596972449238336868326196360992252498463385

根據代碼可知,gift2和gift1分別為p的低820-20bit和低10bit,因此當我們通過爆破獲取到低20-10bit的時候,此時為一個p的低位泄露問題。對于1024bit的p,泄露820bit完全夠copper了,我們可以通過copper計算出高204bit即可還原p

from Crypto.Util.number import *
import gmpy2
from tqdm import *
n = 91717197306065801430692774296739087369692505805873730729014813677164858033475119219496549179322145782790263228034134781592967028480301579462111507372893508636592832600206391905790511488678949157112322777098684707325311891056750963286494634489093620270797637437274546909400418496263799669541769586017282231886023275686719495040493703402244867906367008837217453500300992995258096509545406775279177918160331853363991834113918051468978309081085686108283547874975768959542753094631595260890420558364636303078263220001513817844063960023424429484568985727987064710176511050208253838039386390968276801658300795687804601169987051671314061987254212363117325786734328360418591971610392966867659045907550755979167652038093091970078722854251659581538266806207906127491377972897441916942048136016416739633568604447564119372465662628724153812001753748410162478969725179843125714619352895967577899670208386148053595763674920185320834513587
c = 53725206995000716522893276595058419071990290621803579636161714383330892673055811337947487241701642126496591685585109862245420917684160662867863785840324861826954623093740844326627026833476771622577100464186879804184565843869885634004202583123814660253474988365767802371596929119773493402264073966760818738577604694066757843772483509464516822006312737285138313587227005339175914335841617310097530993158296079585719772401849963001042345007495440110071538584261056055469925721208755935971137618873034799819342505088130217626174789908762309465751064851354313099531229991764250968313733026934453793364342598912519963653648573385780950148182927905527658001218917373163825532068287661941387464083148002185635404194796699532320249403305428191157038659625440168989244227207215946636349083290983113055351713899941081154804665455470002453942340935361232121886299764516109079270616076269084847241248414373185392810503507977061708566426
leak = 5077110719426498428662246006638349628986894614097694065336047422264042823893900747327210766546701290926253205743419412459378571920759093322149140413682875156857171051511499793127787270654329155934268596972449238336868326196360992252498463385
e = 65537
PR.<x> = PolynomialRing(Zmod(n))
for i in trange(2**10):p_low = (leak<<20)+(i<<10)+513f = x*2**820+p_lowroot = f.monic().small_roots(X=2^204,beta=0.33)if root:p = int(root[0]*2**820+p_low)if n%p==0:phi = p-1d = inverse_mod(e,phi)m = pow(c,d,p)flag = bytes.fromhex(hex(m)[2:])print(flag)break

NumberTheory

題目:

from Crypto.Util.number import *
import hintflag=b'xxx'
e=65537
p=getPrime(512)
q=getPrime(512)
n=p*q
m=bytes_to_long(flag)
c=pow(m,e,n)
k=getPrime(1024)
assert hint + 233 * k == 233 * k * p
print(n)
print(c)
print(hint)# 105531804094410236294687082475828411218788143973352026416392542762437103918840861241726193253936370648195682452618343195471719649394086997793137653518966739212122830015579955183805636213883066694989610003565432493653164047938048521354525623612253955387430773546124647105772639376194421783783651686606080214099
# 6838127295540107402282470465780599628759317234806902778570348919850980664834107227012249617036087381075344016550381137159643512672239826438903241091658619314078921936719784123522758604349399440232971511649918093228288847534685526358191804172060250409498531941883162873696671060909325234109062997554795436940
# 225457129615945961139095949356083106510992163176770860368085043522677811094793442173512565115313130227614423196268240217775831118417780318014842280209747426271227826513967791945116378179885000662888744992914390207196310600996050316737090999399962338133222370745589250853315876818226312453376340282748842779666176953455553054310328901299083159029050169950812885486884682347263045764918907196922313892044095742248895091717187372068779768743879411865275203496650858608

根據題目名字,顧名思義:數論
已知等式, h i n t + 233 k = 233 k p 已知等式,hint+233k=233kp 已知等式,hint+233k=233kp
? 233 k × ( p ? 1 ) = h i n t \Rightarrow 233k\times(p-1)=hint ?233k×(p?1)=hint
那么,則有,任意正整數a
a h i n t = a 233 k × ( p ? 1 ) a^{hint} = a^{233k\times(p-1)} ahint=a233k×(p?1)
此時,在模上一個p的情況下
a h i n t m o d p = a 233 k × ( p ? 1 ) m o d p a^{hint} mod \space p = a^{233k\times(p-1)} mod \space p ahintmod?p=a233k×(p?1)mod?p
根據費馬小定理,可得
a h i n t m o d p ≡ 1 m o d p a^{hint} mod \space p \equiv 1 \space mod \space p ahintmod?p1?mod?p
a h i n t m o d p ? 1 = k p a^{hint} mod \space p -1 = kp ahintmod?p?1=kp
∵ n = p × q \because n = p\times q n=p×q
∴ g c d ( a h i n t , n ) = p \therefore gcd(a^{hint},n)=p gcd(ahint,n)=p
求出p之后,直接RSA解密即可

from Crypto.Util.number import *
import gmpy2n =  105531804094410236294687082475828411218788143973352026416392542762437103918840861241726193253936370648195682452618343195471719649394086997793137653518966739212122830015579955183805636213883066694989610003565432493653164047938048521354525623612253955387430773546124647105772639376194421783783651686606080214099
c =  6838127295540107402282470465780599628759317234806902778570348919850980664834107227012249617036087381075344016550381137159643512672239826438903241091658619314078921936719784123522758604349399440232971511649918093228288847534685526358191804172060250409498531941883162873696671060909325234109062997554795436940
hint = 225457129615945961139095949356083106510992163176770860368085043522677811094793442173512565115313130227614423196268240217775831118417780318014842280209747426271227826513967791945116378179885000662888744992914390207196310600996050316737090999399962338133222370745589250853315876818226312453376340282748842779666176953455553054310328901299083159029050169950812885486884682347263045764918907196922313892044095742248895091717187372068779768743879411865275203496650858608
e = 65537
p = gmpy2.gcd(pow(5,hint,n)-1,n)
q = n//p
phi = (p-1)*(q-1)
d = gmpy2.invert(e,phi)
m = pow(c,d,n)
flag = long_to_bytes(m)
print(flag)

下午應該還上了一個格的題目,以后有空再寫

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/76852.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76852.shtml
英文地址,請注明出處:http://en.pswp.cn/web/76852.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

加密與解密完全指南,使用Java實現

文章目錄 1. 加密基礎知識1.1 什么是加密&#xff1f;1.2 加密的歷史簡介1.2.1 古典加密1.2.2 現代加密的起源 1.3 加密的基本概念1.3.1 密碼學中的關鍵術語1.3.2 加密的基本原則 1.4 加密的分類1.4.1 對稱加密&#xff08;Symmetric Encryption&#xff09;1.4.2 非對稱加密&a…

十一、數據庫day03--SQL語句02

文章目錄 一、查詢語句1. 基本查詢2. 條件查詢2.1 ?較運算符&邏輯運算符2.2 模糊查詢2.3 范圍查詢2.4 判斷空 3. 其他復雜查詢3.1 排序3.2 聚合函數3.3 分組3.4 分頁查詢 二、回顧1. 使? Navicat ?具中的命令列2.命令?基本操作步驟 提示&#xff1a;以下是本篇文章正文…

Flowable 與 bpmn.io@7.0 完整集成示例 Demo

Flowable 與 bpmn.io7.0 完整集成示例 Demo 下面是一個完整的前后端集成示例&#xff0c;包含前端使用 bpmn.js 7.0 和與 Flowable 后端交互的實現。 1. 后端實現 (Spring Boot Flowable) 1.1 添加依賴 (pom.xml) <dependencies><!-- Spring Boot --><depe…

ROS2 安裝詳細教程,Ubuntu 22.04.5 LTS 64 位 操作系統

一、完整安裝流程&#xff08;推薦&#xff09; 1. 安裝依賴工具 sudo apt update && sudo apt install -y software-properties-common curl gnupg2 2. 添加 ROS 2 GPG 密鑰 sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /…

STM32 基本GPIO控制

目錄 GPIO基礎知識 ?編輯IO八種工作模式 固件庫實現LED點燈 蜂鳴器 按鍵基礎知識 ?編輯繼電器 震動傳感器 433M無線模塊 GPIO基礎知識 GPIO(General-Purpose input/output,通用輸入/輸出接口) 用于感知外部信號&#xff08;輸入模式&#xff09;和控制外部設備&…

14.Chromium指紋瀏覽器開發教程之WebGL指紋定制

WebGL指紋概述 當在瀏覽器打開的網頁上瀏覽內容時&#xff0c;看到的大多是平面的、靜態的圖像和文字。但是有時想要在網頁上看到更加生動、立體的圖像&#xff0c;如3D游戲、虛擬現實應用等。這時&#xff0c;就需要用到WebGL。 簡單來說&#xff0c;WebGL&#xff08;Web G…

C# foreach 循環中獲取索引的完整方案

一、手動維護索引變量 ?實現方式?&#xff1a; 在循環外部聲明索引變量&#xff0c;每次迭代手動遞增&#xff1a; int index 0; foreach (var item in collection) { Console.WriteLine($"{index}: {item}"); index; } ?特點?&#xff1a; 簡單直接&#…

Android 下拉欄中的禁用攝像頭和麥克風隱藏

Android 下拉欄中的禁用攝像頭和麥克風隱藏 文章目錄 Android 下拉欄中的禁用攝像頭和麥克風隱藏一、前言二、下拉框中的禁用攝像頭和麥克風隱藏實現1、設置支持屬性為false2、修改代碼 三、其他1、下拉欄中的禁用攝像頭和麥克風隱藏小結2、 Android SensorPrivacyService ps&a…

數字后端設計 (四):時鐘樹綜合——讓芯片的「心跳」同步到每個角落

—— 試想全城的人要在同一秒按下開關——如果有的表快、有的表慢&#xff0c;結果會亂套&#xff01;時鐘樹綜合就是給芯片內部裝一套精準的“廣播對時系統”&#xff0c;讓所有電路踩著同一個節拍工作。 1. 為什么時鐘如此重要&#xff1f; 芯片的「心跳」&#xff1a;時鐘信…

華為網路設備學習-19 路由策略

一、 二、 注意&#xff1a; 當該節點匹配模式為permit下時&#xff0c;參考if else 當該節點匹配模式為deny下時&#xff1a; 1、該節點中的apply子語句不會執行。 2、如果滿足所有判斷&#xff08;if-match&#xff09;條件時&#xff0c;拒絕該節點并跳出&#xff08;即不…

機器學習決策樹

一、何為決策樹 決策樹&#xff08;Decision Tree&#xff09;是一種分類和回歸方法&#xff0c;是基于各種情況發生的所需條件構成決策樹&#xff0c;以實現期望最大化的一種圖解法。由于這種決策分支畫成圖形很像一棵樹的枝干&#xff0c;故稱決策樹。它的運行機制非常通俗易…

香港服務器CPU對比:Intel E3與E5系列核心區別與使用場景

香港服務器的 CPU 配置(核心數與主頻)直接決定了其并發處理能力和數據運算效率&#xff0c;例如高頻多核處理器可顯著提升多線程任務響應速度。在實際業務場景中&#xff0c;不同負載需求對 CPU 架構的要求存在顯著差異——以 Intel E3 和 E5 系列為例&#xff0c;由于兩者在性…

【Rust 精進之路之第8篇-工具賦能】深入 Cargo:依賴管理、構建配置與工作空間 (Workspace)

系列: Rust 精進之路:構建可靠、高效軟件的底層邏輯 作者: 碼覺客 發布日期: 2025-04-20 引言:超越構建,Cargo 是 Rust 生態的引擎 在我們的 Rust 學習之旅初期(第二篇),我們已經與 Cargo 有過初步的接觸。我們學會了使用 cargo new 創建項目骨架,用 cargo build 編…

#systemverilog# 進程控制問題#(八)關于#0 問題的使用(三)

今天,我們繼續研究一下上一節討論的問題。其實,還有一個小問題,我們來探討一下。 `timescale 1ns/10psmodule tb_top(); reg clk; reg reset;initial begin reset = 0; #10 reset = 1; #15 reset = 0; #50 $finish; endinitial beginfor(int i = 0; i < 4 ; i++)fork #…

Linux:簡單自定義shell

1.實現原理 考慮下?這個與shell典型的互動&#xff1a; [rootlocalhost epoll]# ls client.cpp readme.md server.cpp utility.h [rootlocalhost epoll]# ps PID TTY TIME CMD 3451 pts/0 00:00:00 bash 3514 pts/0 00:00:00 ps ?下圖的時間軸來表?事件的發?次序。其中時…

PLSQL語法入門--PL/SQL 基礎詳解

PL/SQL 基礎詳解 PL/SQL&#xff08;Procedural Language for SQL&#xff09;是 Oracle 數據庫中的一種過程式語言&#xff0c;它擴展了 SQL 的功能&#xff0c;允許開發者編寫復雜的程序邏輯。 一、匿名塊 解釋 匿名塊是 PL/SQL 的基本執行單位&#xff0c;它是一段獨立的…

Oracle--用戶管理

前言&#xff1a;本博客僅作記錄學習使用&#xff0c;部分圖片出自網絡&#xff0c;如有侵犯您的權益&#xff0c;請聯系刪除 用戶管理在 Oracle 數據庫中至關重要。一個服務器通常只運行一個 Oracle 實例&#xff0c;而一個 Oracle 用戶代表一個用戶群&#xff0c;他們通過該用…

UOS+N 卡 + CUDA 環境下 X86 架構 DeepSeek 基于 vLLM 部署與 Dify 平臺搭建指南

一、文檔說明 本文檔是一份關于 DeepSeek 在X86架構下通vLLM工具部署的操作指南&#xff0c;主要面向需要在UOSN卡CUDA環境中部署DeepSeek的技術人員&#xff0c;旨在指導文檔使用者完成從 Python 環境升級、vLLM 庫安裝、模型部署到 Dify 平臺搭建的全流程操作。 二、安裝Pyt…

操作系統之shell實現(下)

&#x1f31f; 各位看官好&#xff0c;我是maomi_9526&#xff01; &#x1f30d; 種一棵樹最好是十年前&#xff0c;其次是現在&#xff01; &#x1f680; 今天來學習C語言的相關知識。 &#x1f44d; 如果覺得這篇文章有幫助&#xff0c;歡迎您一鍵三連&#xff0c;分享給更…

Spark,流量統計案例

提前創好一個文件夾分為四個類 FlowBean中的代碼內容為&#xff1a;package org.example.flow; import org.apache.hadoop.io.Writable; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; //hadoop 序列化 //三個屬性&#xff1a;手機…