首页 > 编程知识 正文

伪随机数怎么破解,伪随机数反推种子

时间:2023-05-06 10:15:22 阅读:119864 作者:2386

一、简单的PRNG算法简介下面简单介绍一下PRNG伪随机数生成算法。 网络教程很多很复杂,其实我们做这个问题没那么多。 请只说最核心的东西。

原理公式:请注意那个。 这实际上表明上次生成的随机数作用于下一个随机数生成过程。

写简单的python代码:

seed***** #初始随机数种子Randrom_Num=[] #生成的所有随机数forIinrange(0,n ) : #由n个随机数seed=) seed*ab

Crypto的主题如下。

from crypto.util.numberimportbytes _ to _ long, getprimefromflagimportflaga=get prime (400 ) b=get prime (400 ) n=get prime (400 ) flag=bytes _ to _ long (flag ) flag ) ' ' ' [ 163308627256046763076307278140040711405507250787069623838237372504040591093114045365666666 ] 1206389051656797369256753724126978896891417438996138961348531162180853687116 20278821528652865286528652865286528652865286 6423808842392824657956483659357469357468074695806269495126404306361290785612537064211810447618803803838193 4826969851356590182066254640331433403340364036674592820824171592178071997446850718585850718585858731020202048585858586086603

33558 www.Sina.com/lcg1=(a * lcg0c ) ml cg2=(a * lcg1c ) %m

两式减法左边为:lcg2-lcg1右边为:(a*LCG1c )-)-(a*lcg0 c )

化简为:[lcg2-lcg1=a*(lcg1-lcg0) ] %m

求出剩馀运算规则就知道了

[a=(LCG2-LCG1) *GMPy2.invert ) LCG1-LCG0,]%m

这个时代进入lcg0、lcg1、lcg2后可以求出a

代入LCG1=(a*LCG0c ) %m,将c作为未知数置于等式左边,则式如下。

c=[LCG1-(a*LCG0) ]%m

#如果你担心自己解的a、c是不是错了,请把第三个公式拿来。

#类推LCG3_guess=(a*LCG2c ) %m

#将求出的lcg3_guess与lcg3进行比较,相等时证明求出的a、c、m是正确的值

#否则,m=m 1,继续验证,通常将flag作为lcd0输入,因此需要求解一元同余式才能求出最后的flag。

求解一元同余式的方法:按公式编程即可。 下面找的是一次联合式的一般解,但是在ctf比赛中实际上只有一个flag,所以只有一个解。 因此,(a,m )为1。 这样编程可以相当简化公式。

三.编写解码脚本importgmpy2from crypto.util.numberimportbytes _ to _ long,getPrime。 long _ to _ bytesn=2482696985135659018429257206254640335400367459282082411781780719974474685071818 0710071831071831071 67255604467630727869278140040711405507114055072578478706962383837373739127250405916040404404453636565656565656678706870623737373737 37373731250404059160404040404445360436365365656 1206389051656797369256753724126974788896891417438902899613896134853116218085368711620202788821528652865 28652865286528652865281909284819349494, 64238088423928246579564836593574693574695807240626949512640430636129078561253706421181510447618803838382193 ] a=642380706421181510494444768188882193 gp y2.invert (result[1]-result [0],n ) ) result [1]-) a*result[0]

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。