time 题目描述 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 import gmpy2import randomimport timefrom Crypto.Util.number import *def get_prime (bits ): x = 1 while gmpy2.is_prime(x) == False : random.seed(round (time.time(),5 )) x = random.getrandbits(bits) return x hint = "" a1 = time.time() flag = "flag{***************}" p = get_prime(2048 ) q = get_prime(2048 ) n = p * q e = 65537 m = bytes_to_long(flag.encode()) assert n > mc = pow (m,e,n) print (n)print (c)hint+=str (time.localtime()) hint+=str (time.time()-a1) m2 = bytes_to_long(hint.encode()) e2 = 196611 p2 = getPrime(1024 ) q2 = gmpy2.next_prime(p2) n2 = p2*q2 assert n2 > m2c2 = pow (m2,e2,n2) print (n2)print (c2)
题目解析 主要是利用了伪随机的特性,只要找到种子seed,伪随机就能找到规律
不难,保留了五位小数,直接爆破
还有就是时间戳之间的转换,参考Python中时间与时间戳之间的转换
1 2 3 4 5 6 7 8 9 10 11 import timedt = "2016-05-05 20:28:54" timeArray = time.strptime(dt, "%Y-%m-%d %H:%M:%S" ) timestamp = time.mktime(timeArray) print timestamp
解题脚本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 from Crypto.Util.number import *from gmpy2 import *import timeimport randomn1 = 449389319572014470973230701130712522617269811294117721031111991008431585050360094769229957883125144692171901233101564003762866045169460601700254891441878998743810037070537170855056466702105713343963726437141651081516150688905082129849562489646846756872586122801890652177495174154676725874072596207108180178755008058522945203093993733331873167443162263746938403044201113440457668163574342481361454421154163291201432319013385234751292922268166299917246608164679144459355173725895117315662317330324505156929077922670671914823996700321766811999551043586214703010131467697982137884162143358399786007967117340789211505834848813471803797101083738140019127129356248286854522464787917597152171952002118368747491099723673529923018951195522714900400225757160886780159504182902140132857743474716967975019342128486236748643365288547828026395873270777532526144687248477070253203339428149026199554962987646174586568177797380361174318868448467648171416588868990979461995030684403161898497550408697577695094783000808003197203603068043364687265824456069673330314452567416143754983137647607219859034406220590219587869898727679465514015732749105798134650890143215022311113143974714405713221391896497966231925409438383535066648782822255201778169275281703 c1 = 401489532945377793610793684722119773544780301600066410745513430092738470870254235710677331662917458735216486816223654944666672512914069274195244871184555059503843032370247894353363929996813688885280857203101709839776411016868985545599944237897372546401710041402579657231598311853522596463296090177664832759103736040102780428858301594805054838853076238331373482465072766841859415172741329175814259920949065993852870119473982972519779774470087935094963692097673607052443800723940091927016071427616754775915389245004208964143538205414854133746775614714447645057516665851780628694481268861808310238416724971673673850671343955386054575121362377868533055225219936712709474708031320743579595394353267596208729974198335174409673325772679039734706841988107519076516144633301371408301344929883397145523702189363308278963683356102257750758738297143036846718834812930796483716912661191147997005333798193659914573185697664706530774799114804036170190966523509331071964600280701252628276934131586398546602582672541075820188456265586487083315680880306767899236884202195162421559689536613740573005749847000477194096162091015847386298782974979446476432285118251267512895876728805199744415821498028998351171848530921695254428997423725875714923331577073 n2 = 15155267112260254814859334094046172735826002259080171081726998162357946701645037659523881592272031544049749021927125983252197909993392636398184049160807707719999605547760868696059871234441249045293267592302009677249269002811886149589869652213333369608947939768457152200437978105250737118847430275142343554191304134468404921824671763164876924921101985937224297479095246132228051655664880892772136476378294042631659251586654877292836243536438334288184387617801131434535466414123998495813296765847561162680781100446656391077184870802746066619879552452560641945080540683058930700833439189784657690146144976738557801495769 c2 = 2468578221703379861458008098241051507850837382948845085288946175636556753744182763176189585173648323464054032011039944322939163396161712722541432975739789351064988098201326803586126788175259878398963744821667593495161587855894677387881240566285601934559118064797092685909593247713834262369686831071897653756217369182373679039639016628932948775518889507209432291038498366540263588850133348471811624348709494110881127292350302658720685976197632586315945770832849119141593343924518836983738868912332048462058640564551286493338707636203013048694776131295632886983835291684044170004544049944003732133038154121113518892438 e2 = 196611 p2 = 123106730572541218855605566021385436071765753262738029208958530903965781875227909642974714736010685670143580347743415357832685249865725150245921795069888441073829479429807586105897472912969591388975228566729202050232896382465835682108694199213251295570982696527682862415340158808173324606996424204650675862831 q2 = 123106730572541218855605566021385436071765753262738029208958530903965781875227909642974714736010685670143580347743415357832685249865725150245921795069888441073829479429807586105897472912969591388975228566729202050232896382465835682108694199213251295570982696527682862415340158808173324606996424204650675860599 e1 = 65537 local_time = 'time.struct_time(tm_year=2021, tm_mon=4, tm_mday=28, tm_hour=20, tm_min=42, tm_sec=6, tm_wday=2, tm_yday=118, tm_isdst=0)' dt = "2021-04-28 20:42:06" timeArray = time.strptime(dt, "%Y-%m-%d %H:%M:%S" ) timestamp = time.mktime(timeArray) def get_prime (bits, new_p ): x = 1 random.seed(round (new_p, 5 )) x = random.getrandbits(bits) return x t = timestamp while 1 : t -= 0.00001 print (t) hint = "" a1 = time.time() p = get_prime(2048 , t) if not is_prime(p): continue if n1 % p != 0 : continue q = n1 // p d = invert(e1, (p-1 )*(q-1 )) m = pow (c1, d, n1) tmp_flag = long_to_bytes(m) if tmp_flag.startswith(b'flag' ): print (tmp_flag) break