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")