cryptopals

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

pkcs7_padding_validation.py (670B)


      1 from Crypto.Cipher import AES
      2 
      3 def pkcs7_padding(msg):
      4     pad_len = AES.block_size - (len(msg) % AES.block_size)
      5     return msg + ''.join([chr(pad_len) for x in range(pad_len)])
      6 
      7 def pkcs7_padding_stripper(msg):
      8     if ord(msg[len(msg) - 1]) > AES.block_size or ord(msg[len(msg) - 1]) == 0:
      9         raise Exception("invalid pkcs7 padding")
     10     for c in msg[len(msg) - ord(msg[len(msg) - 1]):]:
     11         if c != msg[len(msg) - 1]:
     12             raise Exception("invalid pkcs7 padding")
     13     return msg[:len(msg) - ord(msg[len(msg) - 1])]
     14 
     15 plaintext = "YELLOW SUBMARINE"
     16 
     17 pad = pkcs7_padding(plaintext)
     18 print pad.encode("hex")
     19 print pkcs7_padding_stripper(pad).encode("hex")