He estado tratando de implementar el descifrado AES CBC en Python. Dado que el texto cifrado no es un múltiplo de 16 bytes, fue necesario relleno. Sin relleno, este error surgióAES descifrado relleno con PKCS5 Python
"TypeError: cadena de longitud impar"
pero no pude encontrar una referencia adecuado para la aplicación en PKCS5 PyCrypto Python. ¿Hay algún comando para implementar esto? Gracias
Después de considerar la sugerencia de Marcus, hice esto.
Mi objetivo en realidad es descifrar un mensaje hexadecimal (128bytes) usando este código. Sin embargo, la salida es "?:" Que es muy pequeña y el comando de desbloqueo borra esos bytes. Este es el código.
from Crypto.Cipher import AES
BS = 16
pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS)
unpad = lambda s : s[0:-ord(s[-1])]
class AESCipher:
def __init__(self, key):
self.key = key
def encrypt(self, raw):
raw = pad(raw)
iv = raw[:16]
raw=raw[16:]
#iv = Random.new().read(AES.block_size)
cipher = AES.new(self.key, AES.MODE_CBC, iv)
return (iv + cipher.encrypt(raw)).encode("hex")
def decrypt(self, enc):
iv = enc[:16]
enc= enc[16:]
cipher = AES.new(self.key, AES.MODE_CBC, iv)
return unpad(cipher.decrypt(enc))
mode = AES.MODE_CBC
key = "140b41b22a29beb4061bda66b6747e14"
ciphertext = "4ca00ff4c898d61e1edbf1800618fb2828a226d160dad07883d04e008a7897ee2e4b7465d5290d0c0e6c6822236e1daafb94ffe0c5da05d9476be028ad7c1d81";
key=key[:32]
decryptor = AESCipher(key)
decryptor.__init__(key)
plaintext = decryptor.decrypt(ciphertext)
print plaintext
http://stackoverflow.com/questions/12524994/encrypt-decrypt-using-pycrypto-aes-256/12525165#12525165, las funciones de relleno en respuesta pueden ayudar :) – Marcus