Paddling DES with Crypto.Cipher / ValueError: Input strings must be a multiple of 8 in length

Paddling DES with Crypto.Cipher / ValueError: Input strings must be a multiple of 8 in length

我正在尝试解密 DES 加密的 Bloomberg 文件。

我收到“ValueError:输入字符串的长度必须是 8 的倍数” ' 据我所知,这意味着我需要 'paddle' 将数据设置为正确的字节大小。这样正确吗?

如果可以,我如何使用 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:])

你需要确保 msg 的长度是 8 的倍数。不是,只是在它的末尾添加一些随机字符。

在 BuckTurgidson 发表评论后更新

快速测试可以

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

但只有当 msg 是一个字符串时才有效

该逻辑对二进制缓冲区也有效

Bloomberg 提供了一个命令行解密工具,我自己在 Java 中实现了解密我会说这不值得付出努力,我们应该继续调用解密过程。

你可以找到一个示例 Java 实现 here 尽管我警告你当解密消息恰好是你加载它的缓冲区的大小时存在错误。