cryptopals

https://cryptopals.com/
Log | Files | Refs

ecb_cut_and_paste.py (929B)


      1 import re
      2 from Crypto.Cipher import AES
      3 from Crypto import Random
      4 
      5 key = Random.new().read(AES.block_size)
      6 
      7 def encrypt(msg):
      8     pad_len = AES.block_size - (len(msg) % AES.block_size)
      9     return AES.new(key, AES.MODE_ECB).encrypt(msg + ''.join([chr(pad_len) for i in range(pad_len)]))
     10 
     11 def decrypt_and_parse(cipher):
     12     return parse_string_to_dict(AES.new(key, AES.MODE_ECB).decrypt(cipher))
     13 
     14 def parse_string_to_dict(token):
     15     return {entry.split('=')[0] : entry.split('=')[1] for entry in token.split('&')}
     16 
     17 def profile_for(email):
     18     return encrypt("email=" + re.sub("[&|=]", '', email) + "&uid=10&role=user")
     19 
     20 admin_cipher = profile_for("x04x04x04x04x04x04x04x04x04x04adminx04x04x04x04x04x04x04x04x04x04x04")
     21 email_cipher = profile_for("michael770211@gmail.comx04x04x04x04x04x04")
     22 
     23 print decrypt_and_parse(email_cipher[:AES.block_size * 3] + admin_cipher[AES.block_size : 2 * AES.block_size])