我有一个测试工具,它使用 Twofish 作为加密算法,在将数据发送到服务器之前对其进行加密。该代码是用 C++ 编写的,并使用 Bruce Schneier 的优化 C 实现 ( https://www.schneier.com/code/twofish-optimized-c.zip )。我需要将此工具移植到Python,并且我正在使用twofish模块(https://pypi.python.org/pypi/twofish/0.3.0)。我可以加密和解密 16 个字符长度的字符串,但对于其他字符串长度,它会给出错误“ValueError:无效的块长度”。
如何使用 Python 的 Twofish 模块加密和解密大数据?
>>> from twofish import Twofish
>>> key = binascii.unhexlify('8CACBE276491F6FF4B1EC0E9CFD52E76')
>>> t = Twofish(key)
>>> cipher_text = T.encrypt('deadbeaf12345678')
>>> plain_text = t.decrypt(cipher_text)
>>> plain_text
'deadbeaf12345678'
>>> cipher_text = t.encrypt('deadbeaf12345678hello world 1234')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/site-packages/twofish.py", line 69, in encrypt
raise ValueError('invalid block length')
ValueError: invalid block length
Run Code Online (Sandbox Code Playgroud)
更新: 我正在尝试解决此问题的另一种解决方案。我从 …
我试图按照1998年Bruce Schneider的论文中的描述逐步实现Twofish cypher .尽管如此,我在关键扩张方面已经失败了.
我试图将纸张1对1的细节复制到python中,结果如下:
#! /usr/bin/python3.2
def expandKey256 (key):
m = [0] * (32)
for i in range (32):
m [i] = (key >> (i * 8) ) & 0xff
#m [31 - i] = (key >> (i * 8) ) & 0xff
print ('m = {}\n'.format ( [hex (b) for b in m] ) )
M = [0] * 8
for i in range (8):
for j in range (4):
M [i] += m [4 * …Run Code Online (Sandbox Code Playgroud)