[GYCTF]warm_up

來之不易的warm_up嗚嗚嗚嗚,新學(xué)到了幾個知識點(diǎn):Rabin算法與這個題中左移的逆運(yùn)算以及e和φ(n)不互素

題目

from Crypto.Util.number import *
from encode import KEY

q=getPrime(1024)
p=getPrime(1024)
r=getPrime(1024)

s=getPrime(1500)

e1=125794
e2=42373

n1=p*q
n2=p*r
n3=p*q*s
c1=pow(s,e1,n1)
Key=int(KEY.encode('hex'),16)
key_encode=pow(Key,e2,n3)

with open("enc","a")as f:
    f.write("c1: "+str(c1)+"\n")
    f.write("n1: "+str(n1)+"\n")
    f.write("n2: "+str(n2)+"\n")
    f.write("key_encode: "+str(key_encode)+"\n")
from flag import flag
import os


KEY = os.urandom(len(flag))

dec=int(flag.encode('hex'),16)


assert len(bin(dec)[2:])==335
mask=int('1'*335,2)
dec=(dec^dec<<200 )&mask
enc=dec^bytes_to_long(KEY)
print "enc: "+str(enc)

#enc: 17403902166198774030870481073653666694643312949888760770888896025597904503707411677223946079009696809

題目分析

先說個大概思路,后邊有詳細(xì)的分析和知識點(diǎn)記錄
①通過求n1,n2的公因數(shù)我們可以求出p批糟,進(jìn)一步分解得到q和r
②從 key_encode=pow(Key,e2,n3)可以看出要想求出key我們必須知道n3,而n3=p*q*s所以我們要通過第一個e和φ(n)不互素類型的RSA求出s
③通過推算可以推導(dǎo)出m * *2 與 c * * b_d同余
④使用rabin算法,算出四個解伟众,長度為1500bit的即為s
⑤知道s后,解出一個由三個素?cái)?shù)組成的RSA召廷,求出key
⑥key和給出的enc異或凳厢,再進(jìn)行后續(xù)的位操作,即可得到flag

新學(xué)習(xí)到的知識點(diǎn)

e與φ(n)不互素

學(xué)習(xí)

推導(dǎo)過程
2159F283E9C0A9BB07475D60797CE006.jpg

Rabin算法

學(xué)習(xí)
由上面的推斷竞慢,e=2,使用Rabin算法

推導(dǎo)過程

c ≡ m^2 (mod n)


rabin1.png

rabin2.png
優(yōu)化

之前計(jì)算擴(kuò)展歐幾里得算法ap+bq=gcd(a,b)中a和b先紫,一直用自己寫的,現(xiàn)在才知道a=invert(p,q)``b=invert(q,p)

位運(yùn)算

assert len(bin(dec)[2:])==335
mask=int('1'*335,2)
dec=(dec^dec<<200 )&mask
enc=dec^bytes_to_long(KEY)
print "enc: "+str(enc)

這里有一個陷阱筹煮,因?yàn)閙ask全是1泡孩,按位與可以省略....我之前沒發(fā)現(xiàn)這個,還一直想著怎么逆
我們把解出的key和enc異或寺谤,得到現(xiàn)在的dec
原來的dec與原來的dec左移200位得到現(xiàn)在的dec


左移.jpg

由于左移后后200位為0仑鸥,所以現(xiàn)在dec的后200位即為原dec后200位
再從原dec后200位取出后135位,與現(xiàn)在dec前135位異或变屁,即為原dec的前135位

代碼

from gmpy2 import *
from Crypto.Util.number import *
import exgcdmoni
n1=15653165971272925436189715950306169488648677427569197436559321968692908786349053303839431043588260338317859397537409728729274630550454731306685369845739785958309492188309739135163206662322980634812713910231189563194520522299672424106135656125893413504868167774287157038801622413798125676071689173117885182987841510070517898710350608725809906704505037866925358298525340393278376093071591988997064894579887906638790394371193617375086245950012269822349986482584060745112453163774290976851732665573217485779016736517696391513031881133151033844438314444107440811148603369668944891577028184130587885396017194863581130429121
n2=16489315386189042325770722192051506427349661112741403036117573859132337429264884611622357211389605225298644036805277212706583007338311350354908188224017869204022357980160833603890106564921333757491827877881996534008550579568290954848163873756688735179943313218316121156169277347705100580489857710376956784845139492131491003087888548241338393764269176675849400130460962312511303071508724811323438930655022930044289801178261135747942804968069730574751117952892336466612936801767553879313788406195290612707141092629226262881229776085126595220954398177476898915921943956162959257866832266411559621885794764791161258015571
c1=9977992111543474765993146699435780943354123551515555639473990571150196059887059696672744669228084544909025528146255490100789992216506586730653100894938711107779449187833366325936098812758615334617812732956967746820046321447169099942918022803930068529359616171025439714650868454930763815035475473077689115645913895433110149735235210437428625515317444853803605457325117693750834579622201070329710209543724812590086065816764917135636424809464755834786301901125786342127636605411141721732886212695150911960225370999521213349980949049923324623683647865441245309856444824402766736069791224029707519660787841893575575974855
e1=125794
e2=42373
key_encode=154190230043753146353030548481259824097315973300626635557077557377724792985967471051038771303021991128148382608945680808938022458604078361850131745923161785422897171143162106718751785423910619082539632583776061636384945874434750267946631953612827762111005810457361526448525422842867001928519321359911975591581818207635923763710541026422076426423704596685256919683190492684987278018502571910294876596243956361277398629634060304624160081587277143907713428490243383194813480543419579737033035126867092469545345710049931834620804229860730306833456574575819681754486527026055566414873480425894862255077897522535758341968447477137256183708467693039633376832871571997148048935811129126086180156680457571784113049835290351001647282189000382279868628184984112626304731043149626327230591704892805774286122197299007823500636066926273430033695532664238665904030038927362086521253828046061437563787421700166850374578569457126653311652359735584860062417872495590142553341805723610473288209629102401412355687033859617593346080141954959333922596227692493410939482451187988507415231993
enc=17403902166198774030870481073653666694643312949888760770888896025597904503707411677223946079009696809
p=gcd(n1,n2)
q=n1//p
phin=(p-1)*(q-1)
b=gcd(e1,phin)
a=e1//b
b_d=invert(a,phin)
c1=pow(c1,b_d,n1)
a,b=exgcdmoni.exgcd(p,q)
r=pow(c1,(p+1)//4,p)
s=pow(c1,(q+1)//4,q)
x1=(a*p*s+b*q*r)%n1
x2=n1-x1
x3=(a*p*s-b*q*r)%n1
x4=n1-x3
s=x3
phin1=(p-1)*(q-1)*(s-1)
d=invert(e2,phin1)
key=pow(key_encode,d,p*q*s)
dec=bin(key^enc)[2:]
dec2=dec[135:]
dec1=bin(int(dec[:135],2)^int(dec2[65:],2))[2:]
dec=int(dec1+dec2,2)
print(long_to_bytes(dec))
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末眼俊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子粟关,更是在濱河造成了極大的恐慌疮胖,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,207評論 6 521
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異澎灸,居然都是意外死亡院塞,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,455評論 3 400
  • 文/潘曉璐 我一進(jìn)店門性昭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拦止,“玉大人,你說我怎么就攤上這事糜颠⌒谧澹” “怎么了?”我有些...
    開封第一講書人閱讀 170,031評論 0 366
  • 文/不壞的土叔 我叫張陵其兴,是天一觀的道長顶瞒。 經(jīng)常有香客問我,道長元旬,這世上最難降的妖魔是什么榴徐? 我笑而不...
    開封第一講書人閱讀 60,334評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮匀归,結(jié)果婚禮上坑资,老公的妹妹穿的比我還像新娘。我一直安慰自己朋譬,他們只是感情好盐茎,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,322評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著徙赢,像睡著了一般字柠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上狡赐,一...
    開封第一講書人閱讀 52,895評論 1 314
  • 那天窑业,我揣著相機(jī)與錄音,去河邊找鬼枕屉。 笑死常柄,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的搀擂。 我是一名探鬼主播西潘,決...
    沈念sama閱讀 41,300評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼哨颂!你這毒婦竟也來了喷市?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,264評論 0 277
  • 序言:老撾萬榮一對情侶失蹤威恼,失蹤者是張志新(化名)和其女友劉穎品姓,沒想到半個月后寝并,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,784評論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡腹备,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,870評論 3 343
  • 正文 我和宋清朗相戀三年衬潦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片植酥。...
    茶點(diǎn)故事閱讀 40,989評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡镀岛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出惧互,到底是詐尸還是另有隱情哎媚,我是刑警寧澤喇伯,帶...
    沈念sama閱讀 36,649評論 5 351
  • 正文 年R本政府宣布喊儡,位于F島的核電站,受9級特大地震影響稻据,放射性物質(zhì)發(fā)生泄漏艾猜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,331評論 3 336
  • 文/蒙蒙 一捻悯、第九天 我趴在偏房一處隱蔽的房頂上張望匆赃。 院中可真熱鬧,春花似錦今缚、人聲如沸算柳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,814評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瞬项。三九已至,卻和暖如春何荚,著一層夾襖步出監(jiān)牢的瞬間囱淋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,940評論 1 275
  • 我被黑心中介騙來泰國打工餐塘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留妥衣,地道東北人。 一個月前我還...
    沈念sama閱讀 49,452評論 3 379
  • 正文 我出身青樓戒傻,卻偏偏與公主長得像税手,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子需纳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,995評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 關(guān)于使用python實(shí)現(xiàn)RSA加密解密 一芦倒、非對稱加密算法 1、乙方生成兩把密鑰(公鑰和私鑰)候齿。公鑰是公開的熙暴,任何...
    ttaymm閱讀 940評論 0 0
  • 一闺属、RSA的歷史 1976 年以前,所有的加密方法都是同一種模式: (1)甲方選擇某一種加密規(guī)則周霉,對信息進(jìn)行加密掂器;...
    開著保時(shí)捷堵你家門口閱讀 2,351評論 0 1
  • 姓名:于川皓 學(xué)號:16140210089 轉(zhuǎn)載自:https://baike.baidu.com/item/RS...
    道無涯_cc76閱讀 2,564評論 0 1
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些閱讀 2,037評論 0 2
  • 飯香以入鼻, 一切總永記俱箱。 粗茶淡飯不比玉国瓮, 可我眼中足為惜。 并非窮困困吾志狞谱, 而是長輩輩關(guān)心乃摹。
    嚴(yán)絲閱讀 139評論 0 2