J'ai essayé d'implémenter le décryptage AES CBC en Python. Puisque le texte chiffré n'est pas un multiple de 16 octets, le remplissage était nécessaire. Sans rembourrage, cette erreur fait surfaceRembourrage de décryptage AES avec PKCS5 Python
« TypeError: chaîne de longueur Odd »
Mais je ne pouvais pas trouver une bonne référence pour la mise en œuvre PKCS5 dans PyCrypto Python. Y a-t-il des commandes pour implémenter ceci? Après avoir examiné la suggestion de Marcus, je l'ai fait.
Mon but est en fait de déchiffrer un message hexadécimal (128 octets) en utilisant ce code. Cependant, la sortie est "?:" Qui est très petite et la commande unpad supprime ces octets. C'est le code.
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, les fonctions de remplissage en réponse peut aider :) – Marcus