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 尽管我警告你当解密消息恰好是你加载它的缓冲区的大小时存在错误。
我正在尝试解密 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 尽管我警告你当解密消息恰好是你加载它的缓冲区的大小时存在错误。