123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- from Crypto.Cipher import AES
- from random import randint
- key = "aaaabbbbccccdddd"
- def decr(ciphertext):
- iv = ciphertext[:16]
- c = ciphertext[17:]
- cipher = AES.new(key, AES.MODE_CBC, iv)
- return ispkcs7(cipher.decrypt(c))
- """ decrypts the ct and returns it when padding is ok, else retuirn False """
- def decrypt(ciphertext):
- iv = ciphertext[:16]
- c = ciphertext[16:]
- cipher = AES.new(key, AES.MODE_CBC, iv)
- plain = cipher.decrypt(c)
- #print('Debug: padded msg: %s' % plain.encode('hex'))
- if ispkcs7(plain):
- return remove_padding(plain)
- return False
- def remove_padding(pt):
- pad_len = int(ord(pt[-1]))
- return pt[:-pad_len]
- def ispkcs7(plaintext):
- l = len(plaintext)
- c = ord(plaintext[l-1])
- if (c > 16) or (c < 1):
- return False
- if plaintext[l-c:] != chr(c) * c:
- return False
- return True
- def encr(plaintext):
- iv = ''.join([chr(randint(0,0xff)) for x in range(16)])
- cipher = AES.new(key, AES.MODE_CBC, iv)
- ciphertext = cipher.encrypt(pkcs7(plaintext))
- return iv + ciphertext
- def pkcs7(plaintext):
- print("PKCS#7")
- print plaintext
- if len(plaintext) % 16 == 0:
- pad = "\x00" * 16
- else:
- padbytes = 16 - len(plaintext) % 16
- pad = padbytes * chr(padbytes)
- tmp= plaintext + pad
- print(tmp.encode('hex'))
- return plaintext + pad
|