格兩例12345

osu/Lucky Roll gaming

周末osu有道題:lcg已知低位

def lcg(s, a, b, p):return (a * s + b) % pp = getPrime(floor(72.7))
a = randrange(0, p)
b = randrange(0, p)
seed = randrange(0, p)
print(f"{p = }")
print(f"{a = }")
print(f"{b = }")def get_roll():global seedseed = lcg(seed, a, b, p)return seed % 100out = []
for _ in range(floor(72.7)):out.append(get_roll())
print(f"{out = }")flag = open("flag.txt", "rb").read()
key = bytes([get_roll() for _ in range(16)])
iv = bytes([get_roll() for _ in range(16)])
cipher = AES.new(key, AES.MODE_CBC, iv)
print(cipher.encrypt(pad(flag, 16)).hex())

題目很短,先給出lcg的參數,然后輸出72個seed%100的值,后邊是AES不是重點。

從網上搜到一例是給出高位的:crypto-babyLCG(NPUCTF2020)_lcg已知低位-CSDN博客?

名字上是低位實際上是高位。共128位已知高64位。轉出來式子:

l_{2} = al_{1}+(ah_{1}+b-h_{2})?從式子上看泄露部分跟高位還是低位無關,所以構造格是完全相同的。

\begin{vmatrix} m & 0 & 0\\ A & 1 & 0\\ B & 0 & m/100 \end{vmatrix}?

m = 4420073644184861649599
a = 1144993629389611207194
b = 3504184699413397958941
l = [0,39, 47, 95, 1, 77, 89, 77, 70, 99, 23, 44, 38, 87, 34, 99, 42, 10, 67, 24, 3, 2, 80, 26, 87, 91, 86, 1, 71, 59, 97, 69, 31, 17, 91, 73, 78, 43, 18, 15, 46, 22, 68, 98, 60, 98, 17, 53, 13, 6, 13, 19, 50, 73, 44, 7, 44, 3, 5, 80, 26, 10, 55, 27, 47, 72, 80, 53, 2, 40, 64, 55, 6]
enc = '34daaa9f7773d7ea4d5f96ef3dab1bbf5584ecec9f0542bbee0c92130721d925f40b175e50587196874e14332460257b'A = [1]
B = [0]
for i in range(1, len(l)-1):A.append(a*A[i-1] % m)B.append((a*B[i-1]+(a*l[i]+b-l[i+1])*inverse_mod(100,m)) % m)
A = A[1:]
B = B[1:]
dim = len(l)
M = matrix(ZZ, dim, dim)
for i in range(dim-2):M[i, i] = mM[-2, i] = A[i]M[-1, i] = B[i]M[i, -2] = M[i, -1] = 0
M[-2,-2] =  1
M[-1,-1] = m//100  #高位的規模 格與高低位無關,但需要未知部分明顯小于模ll = M.LLL()[0]
l1 = ll[-2]
h1 = l[1]
s1 = l1*100+h1
#for s1=a*seed+b%m
seed = ((s1-b)*inverse_mod(a,m))%m
print(seed)def get_roll():global seedseed = (seed*a+b)%mreturn int(seed % 100)seed = 728664259414514712557
out = []
for _ in range(floor(72.7)):out.append(get_roll())key = bytes([get_roll() for _ in range(16)])
iv = bytes([get_roll() for _ in range(16)])from Crypto.Cipher import AES
cipher = AES.new(key, AES.MODE_CBC, iv)
print(cipher.decrypt(bytes.fromhex(enc)))
#osu{w0uld_y0u_l1k3_f1r5t_0r_53c0nd_p1ck}

第2題來自gcc ctf?

GCC/TooManyLeaks

題目也很短給出g,A=2^a,B=2^b,c,AC=2^(a+c),s = B^a,s2=AC^b 其中s,s2僅給出高257位

s_{2} = AC^{b}=2^{ab+bc}=2^{ab}*2^{bc}=s_{1}*B^c

再通過r1,r2分別是s1,s2的高位得到

-x+y*BC+r2-r1*BC = 0 (mod p)

從rec師傅那問到構造方法(前邊自己想的幾個都沒成功)

\begin{vmatrix} 1 & 0 & BC\\ 0 & 2^{255} & R\\ 0 & 0 & p \end{vmatrix}

用自制的數據驗證得到的結果:第1個是-x但后邊并不是y,y通過計算得到

p=12659765344651740648724763467724826993725936263366951091039118416195292099370631377712042960634433459603684366298668316118798753725083109726606307230709481
A=3301451331273103822833339817189898484477574460332521541023442766617163003861277567173209945681794302860954824946103841799431004692332025577336344394695314
B=4585794959794770660643739179463936175470737153250504109915159478661133411133496952267060123069524419032124459912888910847574766484421490926652243218962165
r1=2568748433813321161874639775621008976218176085243148442053880160521563872123950485879781803171876295709491228751046125319137014580919198982132588104122368
c=13305825506775525477695274133373660177357107668926266252207560823721404224069651345842091298405541700114875323083835571095924844005731356668708175418706451
AC=7245241643057289361660908682282370311759108862519890618466911853745311287850476739612486696335989486506224784314474292337315512082870292214611222140900864
r2=3829741721947473719324421527352078984331611168371079834096760630101921404398331513243772077101441758022492336098369985623504441570880895898971858238701568
ciphertext = bytes.fromhex('89c372210be2a7b313366206f7426f941157009493d00fcb18b467250139413b6ea1ada6302e1916b6c02a6f935f4ed4')
iv = bytes.fromhex('c7d192fb72b529acf7b57d488c182466')'''
A = 2^a ,B = 2^b ,AC = 2^(a+c)
s = B^a = 2^(ab) => r1+x = 2^(ab)
s2 = AC^b = 2^(ab+bc) = 2^ab * 2^bc = s * B^c => r2 + y = (r1+x)*BC = r1*BC + x*BC
-x + y*BC+ r1*BC - r2 = 0 mod p 
|1 0 BC|
|0 1 R |.LLL() = |y k x|
|0 0 p |
'''
BC = pow(B,c,p)
R = int((r1*BC-r2)%p)
M = matrix(ZZ,[[1,0,BC],[0,2^255,R],[0,0,p]])
L = M.LLL()
'''
[ -25633356745769628425188974048965624683829363674340702376652630056616274263520                                                                               0   25192355301191283908458965869175850121091834483889075955116860140524780856947]
[  16398029187545116410379158779174289772216017281301637621417139570711691284296   57896044618658097711785492504343953926634992332820282019728792003956564819968   41036197941114149842214882116707031982582245609637689544867914273576525805038]
[-149510885595142246734642323500819848441581984553636254311696365107836707555515  173688133855974293135356477513031861779904976998460846059186376011869694459904 -175483554550299102224589434426378557989582203738521393133765379465260896275103]
'''
for v in L:x,k,y = vy.nbits()x.nbits()hex(x)hex(y)x = 25633356745769628425188974048965624683829363674340702376652630056616274263520
#y = BC*(r1+x)%p-r2
y = 41036197941114149842214882116707031982582245609637689544867914273576525805038
#0x5ab9aa3a0a42183deb14e8725ef711b906ecc058e8be025b04d2d5322104b5ee
s = r1+x 
#0x310bc7e26b23c79469a5c1eb7b210f527af22ba0d17726051cd95216d6cdfd862440f4a33747fa708f7b878e6b882f164a2e7cf72cc2b67754c416a3fc6c4f48import hashlib
from Crypto.Cipher import AESsha1 = hashlib.sha1()
sha1.update(str(s).encode('ascii'))
key = sha1.digest()[:16]cipher = AES.new(key, AES.MODE_CBC, iv)
flag = cipher.decrypt(ciphertext)
#b'GCC{D1ff13_H3llm4n_L34k_15_FUn!!}\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f'

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

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

相關文章

冪等性設計

目錄 前言 冪等性設計 冪等性設計處理流程 HTTP 冪等性 消息隊列冪等性 基于kafka 前言 冪等性設計,就是說,一次和多次請求某一個資源應該具有同樣的副作用。為什么我們要有冪等性操作?說白了,就兩點:1、網絡的…

LeetCode第125場雙周賽個人題解

目錄 100231. 超過閾值的最少操作數 I 原題鏈接 思路分析 AC代碼 100232. 超過閾值的最少操作數 II 原題鏈接 思路分析 AC代碼 100226. 在帶權樹網絡中統計可連接服務器對數目 原題鏈接 思路分析 AC代碼 100210. 最大節點價值之和 原題鏈接 思路分析 AC代碼 10023…

大話C++之:對象內存模型

一般繼承(無虛函數覆蓋) 只有一個虛指針,指向一個虛表,虛函數按順序從祖先節點開始插入到虛表上。字段按順序從祖先節點開始插入到對象內存上 一般繼承(有虛函數覆蓋) 只有一個虛指針,指向一個虛表,虛函數按順序從祖先節點開始&a…

桂院校園導航 靜態項目 二次開發教程 2.0

Gitee代碼倉庫:桂院校園導航小程序 GitHub代碼倉庫:GLU-Campus-Guide 靜態項目 2.0版本 升級日志 序號 板塊 詳情 1 首頁 重做了首頁,界面更加高效和美觀 2 校園頁 新增了 “校園指南” 功能,可以搜索和瀏覽校園生活指南…

【金三銀四】每日一點面試題(Java--JVM篇)

1、說一下 JVM 的主要組成部分及其作用? JVM(Java虛擬機)是Java程序運行的核心組件,它負責將Java字節碼翻譯成底層操作系統能夠執行的指令。JVM由以下幾個主要組成部分構成: 類加載器(Class Loader&#…

Modbus協議詳細解析與案例分享

目錄 Modbus協議詳細解析與案例分享1. Modbus協議簡介2. Modbus RTU和Modbus TCP的區別3. Modbus幀結構4. Modbus協議示例5. Modbus應用場景結語 Modbus協議詳細解析與案例分享 1. Modbus協議簡介 Modbus是一種串行通信協議,用于實現工業自動化設備之間的通信。它…

消息中間件|初識消息隊列

文章目錄 消息隊列是什么?消息隊列關鍵概念消息隊列優點消息隊列的應用場景異步處理應用解耦流量削峰消息通訊 常用消息隊列中間件的對比 消息隊列是什么? 消息隊列(Message Queue)是一種用于在軟件系統之間傳遞消息的通信機制。…

spring boot概述

SpringBoot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。 該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。 通過這種方式,SpringBoot致力于在蓬勃發展的快速應用開發…

實時抓取SKU商品屬性詳細信息API數據接口(淘寶,某音)

item_sku-獲取sku詳細信息 taobao.item_sku詳細信息 API公共參數 請求地址: https://api-gw.onebound.cn/taobao/item_sku 名稱類型必須描述keyString是調用key(演示示例)secretString是調用密鑰api_nameString是API接口名稱(包括在請求地…

設計模式學習筆記 - 設計原則 - 3.里氏替換原則,它和多態的區別是什么?

前言 今天來學習 SOLID 中的 L:里氏替換原則。它的英文翻譯是 Liskov Substitution Principle,縮寫為 LSP。 英文原話是: Functions that use points of references of base classes must be able to use objects of derived classes withou…

python-分享篇-生成仿微信公眾號推廣的個性二維碼(支持動態)

代碼 生成仿微信公眾號推廣的個性二維碼(支持動態)from MyQR import myqr # 要生成動態二維碼,只需要將piture參數和save_name參數設置gif動圖即可 myqr.run(wordshttps://blog.csdn.net/stqer/article/details/135553200, # 指定二維碼包含…

JVM(內存區域劃分)

JVM JVM - Java虛擬機 我們編寫的 Java 程序, 是不能夠被 OS 直接識別的 JVM 充當翻譯官的角色, 負責把我們寫的的 Java 程序 ,翻譯給 OS “聽”, 讓 OS 能夠識別我們所寫的 Java 代碼 JVM 內存區域劃分 JVM 是一個應用程序, 在啟動的時候, 會從 操作系統 申請到一整塊很大的內…

AI-RAN聯盟在MWC24上正式啟動

AI-RAN聯盟在MWC24上正式啟動。它的logo是這個樣的: 2月26日,AI-RAN聯盟(AI-RAN Alliance)在2024年世界移動通信大會(MWC 2024)上成立。創始成員包括亞馬遜云科技、Arm、DeepSig、愛立信、微軟、諾基亞、美…

【dc-dc】AP510X單路低壓差線性恒流芯片

說明 AP510X 是一系列外圍電路簡潔的單路線性 LED 恒 流芯片,適用于 3-60V 電壓范圍的 LED 恒流調光 領域。 AP510X 采用我司專利算法,可以實現高精度的恒 流效果,輸出電流恒流精度≤ 3 %,電源供電工作 范…

【LeetCode】升級打怪之路 Day 11:棧的應用、單調棧

今日題目: Problem 1: 棧的應用 155. 最小棧 | LeetCode20. 有效的括號 | LeetCode150. 逆波蘭表達式求值 | LeetCode Problem 2: 單調棧 496. 下一個更大元素 I739. 每日溫度503. 下一個更大元素 II 目錄 Problem 1:棧 - “先進后出”的應用LC 155. 最…

【Java設計模式】五、建造者模式

文章目錄 1、建造者模式2、案例:共享單車的創建3、其他用途 1、建造者模式 某個對象的構建復雜將復雜的對象的創建 和 屬性賦值所分離,使得同樣的構建過程可以創建不同的表示建造的過程和細節調用者不需要知道,只需要通過構建者去進行操作 …

力扣刷題記錄--463. 島嶼的周長

題目鏈接&#xff1a;463. 島嶼的周長 - 力扣&#xff08;LeetCode&#xff09; 題目描述 我的代碼實現 class Solution {public int islandPerimeter(int[][] grid) { int result0; int rowgrid.length; int colgrid[0].length; for(int i0;i<row;i){for(int j0;j<col…

【EI會議征稿通知】2024年圖像處理與人工智能國際學術會議(ICIPAI2024)

2024年圖像處理與人工智能國際學術會議&#xff08;ICIPAI2024&#xff09; 2024 International Conference on Image Processing and Artificial Intelligence&#xff08;ICIPAI2024&#xff09; 2024年圖像處理與人工智能國際學術會議&#xff08;ICIPAI2024&#xff09;將…

返回靜態數據

在Java項目中&#xff0c;往往不會一直返回某某數據&#xff0c;而是會返回一個靜態頁面&#xff0c;那么&#xff0c;如何正確返回一個靜態頁面呢&#xff1f;&#xff1f; 要想成功的返回一個靜態頁面前提是必須要有一個靜態頁面&#xff1a; <!DOCTYPE html> <ht…

如何讓 JOIN 跑得更快?

JOIN 一直是數據庫性能優化的老大難問題&#xff0c;本來挺快的查詢&#xff0c;一旦涉及了幾個 JOIN&#xff0c;性能就會陡降。而且&#xff0c;參與 JOIN 的表越大越多&#xff0c;性能就越難提上來。 其實&#xff0c;讓 JOIN 跑得快的關鍵是要對 JOIN 分類&#xff0c;分…