#!/usr/bin/env python | |
# coding=utf-8 | |
from os import urandom | |
def process(m, k): | |
tmp = m ^ k | |
res = 0 | |
for i in bin(tmp)[2:]: | |
res = res << 1; | |
if (int(i)): | |
res = res ^ tmp | |
if (res >> 256): | |
res = res ^ P | |
return res | |
def keygen(seed): | |
key = str2num(urandom(32)) | |
while True: | |
yield key | |
key = process(key, seed) | |
def str2num(s): | |
return int(s.encode('hex'), 16) | |
P = 0x10000000000000000000000000000000000000000000000000000000000000425L | |
true_secret = open('flag.txt').read()[:32] | |
assert len(true_secret) == 32 | |
print 'flag{%s}' % true_secret | |
fake_secret1 = "I_am_not_a_secret_so_you_know_me" | |
fake_secret2 = "feeddeadbeefcafefeeddeadbeefcafe" | |
secret = str2num(urandom(32)) | |
generator = keygen(secret) | |
ctxt1 = hex(str2num(true_secret) ^ generator.next())[2:-1] | |
ctxt2 = hex(str2num(fake_secret1) ^ generator.next())[2:-1] | |
ctxt3 = hex(str2num(fake_secret2) ^ generator.next())[2:-1] | |
f = open('ciphertext', 'w') | |
f.write(ctxt1+'\n') | |
f.write(ctxt2+'\n') | |
f.write(ctxt3+'\n') | |
f.close() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment