/ / Paddling DES con Crypto.Cipher / ValueError: Las cadenas de entrada deben ser un múltiplo de 8 en longitud: python, padding, des, bloomberg

Remando DES con Crypto.Cipher / ValueError: Las cadenas de entrada deben ser un múltiplo de 8 en longitud: python, padding, des, bloomberg

Estoy tratando de descifrar los archivos de Bloomberg que están cifrados DES.

Estoy obteniendo un "ValueError": las cadenas de entrada deben ser un múltiplo de 8 en longitud "lo que entiendo significa que debo" remar "los datos al tamaño de byte adecuado. ¿Es correcto?

Si es así, ¿cómo puedo hacerlo usando Crypto.Cipher?

f = open(SourcePath+FileName, "r")
content = f.readlines()
key = b"Eight888"
msg=content[0]
from Crypto.Cipher import DES
decCipher = DES.new(key, DES.MODE_OFB, msg[:DES.block_size])
msgback = decCipher.decrypt(msg[DES.block_size:])

Respuestas

0 para la respuesta № 1

Necesitas estar seguro de que msg tiene una longitud que es un múltiplo de 8. No, solo agrega algunos caracteres aleatorios al final de la misma.

Actualizado después de los comentarios de BuckTurgidson

Una prueba rápida puede ser

if len(msg) % 8 != 0:
toAdd = 8 - len(msg) % 8
# add toAdd chars to msg

pero esto funciona solo si msg es una cuerda

La lógica es válida también para buffers binarios.


0 para la respuesta № 2

Bloomberg suministra una herramienta de descifrado de línea de comando,después de haber implementado el descifrado en Java, diría que no valió la pena el esfuerzo y que deberíamos haber continuado el proceso de descifrado.

Puedes encontrar una implementación Java de muestra aquí aunque le advierto que hay un error cuando el mensaje de descifrado tiene exactamente el tamaño del búfer en el que lo está cargando.