成電 楊皓宇(請各位叫我堇姬)
成電二年級/幽夜工作室繪師
DC : naup_sumire_hime
IG : ckcsc36th_naup
涉獵C++、C、python、遊戲(tkinter、pygame)、資安(Web、Crypto)、AI、flask、html/css/js、 PHP、DC bot。
喜歡看輕小說、動畫、Vtuber、打音遊,也喜歡看百合,就是一個長年混跡ACG的宅女。
偷油一下(推死神和星街)
1. 找兩個質數p , q
2. N=p*q
3. φ(N)=(p-1)*(q-1)
4.找公鑰e,1 < e < φ(N) 且 e和φ(N)互值
5.找私鑰d,e*d除以φ(N)餘1
m-->明文
e-->公鑰
c-->密文
d-->私鑰
*有兩題一樣的,是70points的
N: 1615765684321463054078226051959887884233678317734892901740763321135213636796075462401950274602405095138589898087428337758445013281488966866073355710771864671726991918706558071231266976427184673800225254531695928541272546385146495736420261815693810544589811104967829354461491178200126099661909654163542661541699404839644035177445092988952614918424317082380174383819025585076206641993479326576180793544321194357018916215113009742654408597083724508169216182008449693917227497813165444372201517541788989925461711067825681947947471001390843774746442699739386923285801022685451221261010798837646928092277556198145662924691803032880040492762442561497760689933601781401617086600593482127465655390841361154025890679757514060456103104199255917164678161972735858939464790960448345988941481499050248673128656508055285037090026439683847266536283160142071643015434813473463469733112182328678706702116054036618277506997666534567846763938692335069955755244438415377933440029498378955355877502743215305768814857864433151287
e: 3
c: 1220012318588871886132524757898884422174534558055593713309088304910273991073554732659977133980685370899257850121970812405700793710546674062154237544840177616746805668666317481140872605653768484867292138139949076102907399831998827567645230986345455915692863094364797526497302082734955903755050638155202890599808147130204332030239454609548193370732857240300019596815816006860639254992255194738107991811397196500685989396810773222940007523267032630601449381770324467476670441511297695830038371195786166055669921467988355155696963689199852044947912413082022187178952733134865103084455914904057821890898745653261258346107276390058792338949223415878232277034434046142510780902482500716765933896331360282637705554071922268580430157241598567522324772752885039646885713317810775113741411461898837845999905524246804112266440620557624165618470709586812253893125417659761396612984740891016230905299327084673080946823376058367658665796414168107502482827882764000030048859751949099453053128663379477059252309685864790106
根據(m^e)/N=k...c,推導出m=(k*N+c)^(1/e)
因為e=3很小,故可以直接窮舉k。
import gmpy2
N=0
c=0
e=0
for k in range(10000000000):
[r,exact]=gmpy2.iroot(c+N*k,e)
if exact:
print(bytes.fromhex(hex(r)[2:]))
break
Decrypt my super sick RSA:
c: 421345306292040663864066688931456845278496274597031632020995583473619804626233684
n: 631371953793368771804570727896887140714495090919073481680274581226742748040342637
e: 65537
import libnum
p=0
q=0
N=p*q
e=0
c=0
phi=(p-1)*(q-1)
#libnum.modular.invmod(a,b) --> (a*x)%b=1
#(e*d)%phi=1
d=libnum.modular.invmod(e,phi)
#libnum.n2s() --> 十進制轉字符串
#(c^d)/N=o...m
m=libnum.n2s(c**d%N)
print(m)