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 № 1Necesitas 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.