cryptopals

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit 0ba590df7070dce6796e2d775551b0f0af6b559d
parent 96cc82e1ca073f78f8576dc78e4299f7af835738
Author: mpizzzle <michael.770211@gmail.com>
Date:   Sat, 16 Feb 2019 20:06:03 +0000

challenge 24 complete

Diffstat:
Aset3/break_mt_cipher.py | 32++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+), 0 deletions(-)

diff --git a/set3/break_mt_cipher.py b/set3/break_mt_cipher.py @@ -0,0 +1,32 @@ +from mt19937 import MersenneTwister +from random import Random +import time + +r = Random() +key = r.randint(0, 0xffff) +known_msg = "This is a known plaintext" +prefixed_msg = ''.join([chr(r.randint(0, 0xff)) for i in range(r.randint(0, 1000))]) + known_msg + +def encrypt(key, msg): + mt = MersenneTwister(key) + return ''.join([chr(ord(c) ^ (0xff & mt.extract_number())) for c in msg]) + +def generate_token(seed): + mt = MersenneTwister(seed) + return ''.join([chr(0xff & mt.extract_number()) for i in range(8)]) + +cipher = encrypt(key, prefixed_msg) + +for i in range(0x10000): + if encrypt(i, cipher)[len(cipher) - len(known_msg):] == known_msg: + print i, i == key + break + +current_time = int(time.time()) +token = generate_token(current_time) + +for i in range(100): + guessed_token = generate_token(current_time - i) + if token == guessed_token: + print True + break