Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中带AES-CFB的PyCryptoDome/cryptography不等式_Python_Encryption_Aes_Pycryptodome_Python Cryptography - Fatal编程技术网

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具有
    段大小=128
    和CFB加密。两者都对应于CFB128:

    # 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使用
    段大小=8
    (默认值)和CFB8加密。两者都对应于CFB8:

    # 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抱歉,这是我最初的草稿,没有必要,我会删除它。