cryptopals

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

break_random_access_read_write_aes_ctr.py (746B)


      1 from Crypto.Cipher import AES
      2 from Crypto import Random
      3 from Crypto.Util import Counter
      4 
      5 key = Random.new().read(AES.block_size)
      6 
      7 def encrypt(plaintext):
      8     return AES.new(key, AES.MODE_CTR, counter=Counter.new(128)).encrypt(plaintext)
      9 
     10 def xor(a, b):
     11     return "".join([chr(ord(x) ^ ord(y)) for (x, y) in zip(a, b)])
     12 
     13 def edit(ciphertext, offset, newtext):
     14     plaintext = encrypt(ciphertext)
     15     return encrypt(plaintext[:offset] + newtext + plaintext[offset + len(newtext):])
     16 
     17 ciphertext = encrypt(open('files/25.txt').read())
     18 injected = ''.join(['A' for i in range(len(ciphertext))])
     19 modified_ciphertext = edit(ciphertext, 0, injected) 
     20 
     21 deciphered_plaintext = xor(injected, xor(ciphertext, modified_ciphertext))
     22 print deciphered_plaintext