Форум сайта python.su
Всем обитателям данного форума большой привет.
Словил баг не могу понять в чем причина и куда копать дальше, может кто то, укажет нужное направление?
В общем ситуация такая . Есть клиент который отправляет зашифрованные AES контейнер через system.net.WebClient методом Post.
На веб-сервере (BaseHTTPServer.HTTPServer python2.7) обрабатываю запрос. Данные(байты) из метода post передаю в функцию
Сама функция.
BLOCK_SIZE = 16 def aes_decrypt(self, key, data): if len(data) > BLOCK_SIZE: IV = data[:BLOCK_SIZE] cipher = AES.new(key, AES.MODE_CBC, IV) return self.unpad(cipher.decrypt(data[BLOCK_SIZE:])) def unpad(self, s): return s[:-(ord(s[-1]))]
Офлайн
>>> from Crypto.Cipher import AES >>> from Crypto import Random >>> >>> msg = b'Attack at dawn..' >>> >>> key = b'Sixteen byte key' >>> >>> AES.block_size 16 >>> >>> iv = Random.new().read(AES.block_size) >>> iv b'\xd3\x07 S1y\x8a\xc1\xbd\x95\xae\xc9\xb8^h:' >>> >>> cipher = AES.new(key, AES.MODE_CBC, iv) >>> emsg = iv + cipher.encrypt(msg) >>> emsg b'\xd3\x07 S1y\x8a\xc1\xbd\x95\xae\xc9\xb8^h:\x83\xa076\xd6\xf0\x84\x825\x85D\xe6\x1b\xcf\xdc\xd9' >>> >>> iv = emsg[:AES.block_size] >>> iv b'\xd3\x07 S1y\x8a\xc1\xbd\x95\xae\xc9\xb8^h:' >>> cipher = AES.new(key, AES.MODE_CBC, iv) >>> dmsg = cipher.decrypt(emsg[AES.block_size:]) >>> dmsg b'Attack at dawn..' >>>
Victoros6666.Режим CBC (Cipher block chaining, wiki. картинка) подразумевает, что вектор инициализации используется только для первого блока. Для второго блока вместо вектора инициализации используется предыдущий (первый) зашифрованный блок. Для третьего блока вместо вектора инициализации используется предыдущий (второй) зашифрованный блок.
и на выходе получаю расшифрованное сообщение в таком виде:
Отредактировано py.user.next (Фев. 3, 2017 03:17:42)
Офлайн