27 lines
885 B
Python
27 lines
885 B
Python
|
from Crypto.Cipher import AES
|
||
|
|
||
|
ZEROIV = "\x00"*16
|
||
|
def removePadding(blocksize, s):
|
||
|
'Remove rfc 1423 padding from string.'
|
||
|
n = ord(s[-1]) # last byte contains number of padding bytes
|
||
|
if n > blocksize or n > len(s):
|
||
|
raise Exception('invalid padding')
|
||
|
return s[:-n]
|
||
|
|
||
|
|
||
|
def AESdecryptCBC(data, key, iv=ZEROIV, padding=False):
|
||
|
if len(data) % 16:
|
||
|
print "AESdecryptCBC: data length not /16, truncating"
|
||
|
data = data[0:(len(data)/16) * 16]
|
||
|
data = AES.new(key, AES.MODE_CBC, iv).decrypt(data)
|
||
|
if padding:
|
||
|
return removePadding(16, data)
|
||
|
return data
|
||
|
|
||
|
def AESencryptCBC(data, key, iv=ZEROIV, padding=False):
|
||
|
if len(data) % 16:
|
||
|
print "AESdecryptCBC: data length not /16, truncating"
|
||
|
data = data[0:(len(data)/16) * 16]
|
||
|
data = AES.new(key, AES.MODE_CBC, iv).encrypt(data)
|
||
|
return data
|