ile AES şifre çözme dolgulama Python'da AES CBC şifre çözme işlemini uygulamaya çalışıyorum. Şifrelenmiş metin 16bayttan fazla olmadığı için, doldurma gerekliydi. ": Tek uzunlukta dize TypeError"PKCS5 Python
Ama PyCrypto Python PKCS5 uygulanması için uygun bir referans bulamadık dolgu olmadan, bu hata
yüzüne çıktı. Bunu uygulamak için herhangi bir komut var mı? Teşekkürler
Marcus'un önerisine baktıktan sonra bunu yaptım.
Amacım aslında bu kodu kullanarak bir hex iletisinin (128 byte) şifresini çözmektir. Ancak, çıktı çok küçük olan "?:" Ve unpad komutu bu baytları siliyor. Bu kod.
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, yanıtında dolgu fonksiyonları :) – Marcus