python中带AES-CFB的PyCryptoDome/cryptography不等式
在运行一个测试以确保两个不同的库提供相同的输出时,我发现它们不支持python中带AES-CFB的PyCryptoDome/cryptography不等式,python,encryption,aes,pycryptodome,python-cryptography,Python,Encryption,Aes,Pycryptodome,Python Cryptography,在运行一个测试以确保两个不同的库提供相同的输出时,我发现它们不支持CFB。复制问题的代码是: 从cryptography.hazmat.backends导入默认\u后端 从cryptography.hazmat.primitives.ciphers导入密码、算法、模式 从Crypto.Cipher导入AES KEY=b'legorojoj' IV=b'LegorojojLegorojoj' aes=Cipher(algorithms.aes(KEY)、modes.CFB(IV)、default_
CFB
。复制问题的代码是:
从cryptography.hazmat.backends导入默认\u后端
从cryptography.hazmat.primitives.ciphers导入密码、算法、模式
从Crypto.Cipher导入AES
KEY=b'legorojoj'
IV=b'LegorojojLegorojoj'
aes=Cipher(algorithms.aes(KEY)、modes.CFB(IV)、default_backend()).encryptor()
output_data=aes.update(羽毛落得和保龄球一样快)+aes.finalize()
德尔埃斯
ctr=AES.new(键,AES.MODE_CFB,iv=iv)
输出数据2=ctr.encrypt(羽毛落得和保龄球一样快)
断言输出数据==输出数据2#断言错误
任何有助于解决这一问题的人都会得到通知
此代码与模式OFB(IV)和AES一起工作。必须指定移位寄存器大小中的模式OFB,因此不同的库通常使用不同的默认值。为了区别,移位寄存器的大小(以位为单位)通常附加到CFB,即CFB8使用8位移位寄存器,CFB128使用128位移位寄存器
有两个变体CFB8和CFB128,后者简称为CFB。允许使用默认值为8位的参数segment\u size
以8位整数倍数进行设置
因此,在当前的代码中,加密使用CFB128,PyCryptodome使用CFB8(其默认值),这会导致不同的结果
以下组合起作用:
- PyCryptodome具有
和CFB加密。两者都对应于CFB128:段大小=128
# CFB with a 128 bit shift-register # Output as hex-string: 63230751cc1efe25b980d9e707396a1a171cd413e6e77f1cd7a2d3deb2217255a36ae9cbf86c66 ... aes = Cipher(algorithms.AES(KEY), modes.CFB(IV), default_backend()).encryptor() ... ctr = AES.new(KEY, AES.MODE_CFB, iv=IV, segment_size=128) ...
- PyCryptodome使用
(默认值)和CFB8加密。两者都对应于CFB8:段大小=8
# CFB with a 8 bit shift-register # Output as hex-string: 63d263889ffe94dd4740580067ee798da474c567b8b54319a5022650085c62674628f7c9e790c3 ... aes = Cipher(algorithms.AES(KEY), modes.CFB8(IV), default_backend()).encryptor() ... ctr = AES.new(KEY, AES.MODE_CFB, iv=IV, segment_size=8) ...
请注意,(1)两个Python库都为提供相同的结果,因为它们都使用B128。(2) CFB128比CFB8快:在CFB8中,AES加密必须为每个块调用16次,而在CFB128中调用1次 谢谢你,我认为有人需要改进pycryptodome的文档。你说的“不使用某些模式”是什么意思?你能发布你得到的错误吗(见)@ErtySeidohl抱歉,这是我最初的草稿,没有必要,我会删除它。