日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[NPUCTF2020]Mersenne twister

發(fā)布時(shí)間:2025/3/21 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [NPUCTF2020]Mersenne twister 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

[NPUCTF2020]Mersenne twister

題目

cef4876036ee8b55aa59bca043725bf350a5e491debdef7ef7d63e9609a288ca1e2c82a7fe566bd8709e73c8d495ea504a486ed11189faf8e6fb35617e47d2d1ad5e4783e96afeaae9f7104ec477fb39fe4ec619bf58289709e15c4449f03fc51cba918cd0ebfdc12376b41e7815406482733b3b200826b6c78d86563edaea94dccf459a4291517a4b8367d7b4a53aeecd7e0accf661bfc726f5ba62e1c0e04100108ad32e7d5711f780185cba5cf31d328bee84066be4ab9582cf9d4bfe3c6f96a7732e1c37d800c90fd46277147f0a26c149dcd5eeb0f2df0c075627bc220be5eefdd67186056ac28c21e155a7f247664aaecdb498134de274df10114d1f06f84dd21820f150d69c9439d909dec0f5ccfeab61b62db2ea91d31bc8163ff16c7f458006bd5ac4a5f5bfae2770b23ccfb7195b76aa0a9aa146831667a7b9fe08c19e691afadccb3ca5169ef3fabaa3dad47d536e89ed4cee6f788bc969c3ad3137850ebfc46a73af2b0c036c3da4b4a16506f499445c604dd73eeb846a52f881515a3ad0ab448b4f9ed3e0ab1fffac60b223dde6450ba6198e90e14de107aaf2 from hashlib import * from itertools import * from binascii import hexlify , unhexlifyfrom flag import flag ,seedassert len(flag) == 26 assert flag[:7] == 'npuctf{' assert flag[-1] == '}'XOR = lambda s1 ,s2 : bytes([x1 ^ x2 for x1 ,x2 in zip(s1 , s2)])class mt73991:def __init__(self , seed):self.state = [seed] + [0] * 232self.flag = 0self.srand()self.generate()def srand(self):for i in range(232):self.state[i+1] = 1812433253 * (self.state[i] ^ (self.state[i] >> 27)) - iself.state[i+1] &= 0xffffffffdef generate(self):for i in range(233):y = (self.state[i] & 0x80000000) | (self.state[(i+1)%233] & 0x7fffffff)temp = y >> 1temp ^= self.state[(i + 130) % 233]if y & 1:temp ^= 0x9908f23fself.state[i] = tempdef getramdanbits(self):if self.flag == 233:self.generate()self.flag = 0bits = self.Next(self.state[self.flag]).to_bytes(4 , 'big')self.flag += 1return bitsdef Next(self , tmp):tmp ^= (tmp >> 11)tmp ^= (tmp << 7) & 0x9ddf4680tmp ^= (tmp << 15) & 0xefc65400tmp ^= (tmp >> 18) & 0x34adf670return tmpdef encrypt(key , plain):tmp = md5(plain).digest()return hexlify(XOR(tmp , key))if __name__ == "__main__":flag = flag.encode()random = mt73991(seed)f = open('./cipher.txt' , 'wb')for i in flag:key = b''.join([random.getramdanbits() for _ in range(4)])cipher = encrypt(key , chr(i).encode())f.write(cipher)

解題

梅森旋轉(zhuǎn)算法(Mersenne twister)是一個(gè)偽隨機(jī)數(shù)發(fā)生算法。由松本真和西村拓士在1997年開發(fā),基于有限二進(jìn)制字段上的矩陣線性遞歸。可以快速產(chǎn)生高質(zhì)量的偽隨機(jī)數(shù),修正了古典隨機(jī)數(shù)發(fā)生算法的很多缺陷。

偽隨機(jī)(pseudorandom)就是由算法生成的隨機(jī)數(shù),真隨機(jī)是真正隨機(jī)的數(shù)。真隨機(jī)數(shù)的例子有很多,比如人群身高、零件規(guī)格等。
而一般由計(jì)算機(jī)生成的隨機(jī)數(shù)都是偽隨機(jī)數(shù)。那么,為什么由算法生成的一列數(shù)還可以被稱為是隨機(jī)數(shù)呢?首先,人們是無法自行(不借助計(jì)算機(jī)算法地)判斷一組數(shù)據(jù)的隨機(jī)性的。人們一般通過一些檢驗(yàn)(Test)來判定一列數(shù)據(jù)是否由某種已知分布生成。所以說不論是由算法生成的還是自然生成的數(shù)據(jù),某種意義上只要通過了檢驗(yàn)就被認(rèn)為是隨機(jī)的。

參考一個(gè)關(guān)于梅森旋轉(zhuǎn)的算法及爆破:https://zhuanlan.zhihu.com/p/32892000

from Crypto.Hash import MD5 from hashlib import * from itertools import * from binascii import hexlify, unhexlify from Crypto.Util import number import stringcipher='cef4876036ee8b55aa59bca043725bf350a5e491debdef7ef7d63e9609a288ca1e2c82a7fe5' #沒有寫全是因?yàn)橹恍枰?2位. plain='n' plainmd5=MD5.new(plain.encode()).hexdigest() m1=eval('0x'+plainmd5[:8])^eval('0x'+cipher[:8]) #print(m1) m1=bin(m1)[2:].zfill(32)def reverse1(x):x1=x[:18]tmp=eval('0b'+x[:14])&(eval('0b'+bin(0x34adf670)[2:][-14:]))x2=eval('0b'+x[-14:])^tmpx2=bin(x2)[2:].zfill(14)return x1+x2 def reverse2(x):x2=x[-15:]x1=(eval('0b'+x2)&eval('0b'+bin(0xefc65400)[2:][2:17]))^eval('0b'+x[2:17])tmp=eval('0b'+bin(x1)[-2:])&eval('0b'+bin(0xefc65400)[2:][:2])^eval('0b'+x[:2])return bin(tmp)[2:].zfill(2)+bin(x1)[2:].zfill(15)+x2 def reverse3(x):x3=x[-7:]x2=(eval('0b'+x3)&eval('0b'+bin(0x9ddf4680)[2:][-14:-7]))^eval('0b'+x[-14:-7])x1=(x2&eval('0b'+bin(0x9ddf4680)[2:][-21:-14]))^eval('0b'+x[-21:-14])x0=(x1&eval('0b'+bin(0x9ddf4680)[2:][-28:-21]))^eval('0b'+x[-28:-21])tmp=bin(x0)[2:].zfill(7)+bin(x1)[2:].zfill(7)+bin(x2)[2:].zfill(7)+x3ans=(eval('0b'+tmp[3:28]+'0000000')&0x9ddf4680)^eval('0b'+x)return bin(ans)[2:].zfill(32) def reverse4(x):x1=x[:11]x2=eval('0b'+x1)^eval('0b'+x[11:22])tmp='00000000000'+(x1+bin(x2)[2:].zfill(11))[:21]ans=eval('0b'+tmp)^eval('0b'+x)return bin(ans)[2:].zfill(32)res=m1 for i in range(1,5):res=eval('reverse'+str(i)+'(res)') #print(eval('0b'+res)) seed = 1668245885XOR = lambda s1, s2: bytes([x1 ^ x2 for x1, x2 in zip(s1, s2)])class mt73991:def __init__(self, seed):self.state = [seed] + [0] * 232self.flag = 0self.srand()self.generate()def srand(self):for i in range(232):self.state[i + 1] = 1812433253 * (self.state[i] ^ (self.state[i] >> 27)) - iself.state[i + 1] &= 0xffffffffdef generate(self):for i in range(233):y = (self.state[i] & 0x80000000) | (self.state[(i + 1) % 233] & 0x7fffffff)temp = y >> 1temp ^= self.state[(i + 130) % 233]if y & 1:temp ^= 0x9908f23fself.state[i] = tempdef getramdanbits(self):if self.flag == 233:self.generate()self.flag = 0bits = self.Next(self.state[self.flag]).to_bytes(4, 'big')self.flag += 1return bitsdef Next(self, tmp):tmp ^= (tmp >> 11)tmp ^= (tmp << 7) & 0x9ddf4680tmp ^= (tmp << 15) & 0xefc65400tmp ^= (tmp >> 18) & 0x34adf670return tmpdef encrypt(key, plain):tmp = md5(plain).digest()return hexlify(XOR(tmp, key))crypto=mt73991(seed) f=open('dhg.txt','r').read()s=string.printable dic={} for i in s:temp=MD5.new(i.encode()).hexdigest()dic[temp]=iflag='' for i in range(0,len(f),32):temp=f[i:i+32]key=b''.join([crypto.getramdanbits() for _ in range(4)])tempnum=number.bytes_to_long(key)tempmd5=eval('0x'+temp)^tempnumtempmd5=hex(tempmd5)[2:].zfill(32)flag+=dic[tempmd5] print(flag)

參考代碼

運(yùn)行得到:#npuctf{@_m2r$enne_tw1ste2}

答案

flag{@_m2r$enne_tw1ste2}

總結(jié)

以上是生活随笔為你收集整理的[NPUCTF2020]Mersenne twister的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产一区二区三区 | 国产黄频在线观看 | 国产高清露脸 | jizz视频在线观看 | 国产一区精品视频 | 七月色 | 中文av免费 | 日韩欧美高清在线 | 日本国产一级片 | 日日日操| 日本中文字幕网站 | 亚洲国产欧美另类 | 在线视频 一区二区 | 国产日韩一区二区三区在线观看 | 5d肉蒲团之性战奶水 | 激情综合网婷婷 | 很黄的性视频 | xx色综合| 成人av免费在线 | 手机av资源 | 国产偷v国产偷v亚洲高清 | 午夜视频在线播放 | 亚洲视频456 | 久草天堂 | 伊人婷婷色| 女生张开腿让男生插 | 亚洲欧美综合 | 久久69| 亚洲一区精品在线观看 | 一区二区日韩国产 | 国产精品一区二区三区四 | 国产av天堂无码一区二区三区 | 国产剧情精品 | 18p在线观看| 歪歪6080| 野花国产精品入口 | japanesexxxx日本妞 | 欧美aⅴ| 成人免费视频国产在线观看 | 欧美私人影院 | 校园春色欧美 | 男生裸体视频 | 欧美综合第一页 | 交专区videossex农村 | 国产露脸无套对白在线播放 | 第四色影音先锋 | 五月婷在线 | 精品自拍第一页 | 中文字幕美女 | 欧美日韩高清在线播放 | 成人在线观看一区 | 18禁裸乳无遮挡啪啪无码免费 | 青青草久久 | 特黄色一级片 | 毛片传媒| 国产一区二区在线观看视频 | 国产一区美女 | 亚洲欧美色图 | 动漫av在线免费观看 | 国产一区不卡 | 天天干天天操天天插 | 亚洲久久视频 | 亚洲综合视频一区 | 超碰在线观看91 | 色欲亚洲Av无码精品天堂 | 日韩精品一区二区三区高清免费 | 国产在成人精品线拍偷自揄拍 | 啦啦啦av | 免费久草视频 | 美女视频一区 | 麻豆国产一区二区三区 | 天天色天 | 国产福利精品一区 | 在线观看国产免费av | 国产精品久久久久久白浆 | 国产色无码精品视频国产 | 三年中国片在线高清观看 | 操模特| 亚洲精选av| 欧美伊人网 | 韩国三级在线看 | 久久久久噜噜噜亚洲熟女综合 | 日本网站在线看 | 图片区小说区视频区 | 999久久久久 | xxxxx在线观看 | 黄色三级网 | 在线观看亚洲精品视频 | 男女做爰猛烈高潮描写 | 亚洲av无码一区二区乱子伦as | 99精品久久久久久中文字幕 | 97超在线| 久久久久久九九九 | 欧美日日操| 91婷婷色 | 悟空影视大全免费高清观看在线 | 中文字幕免费在线看线人 | 久久免费观看视频 | 穿越异世荒淫h啪肉np文 |