gpt4 book ai didi

python - PyCryptoDome/Python 中 AES-CFB 的加密不等式

转载 作者:行者123 更新时间:2023-12-04 10:45:49 26 4
gpt4 key购买 nike

在运行测试以确保两个不同的库提供相同的输出时,我发现它们不使用 CFB。复制问题的代码是:

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from Crypto.Cipher import AES

KEY = b'legoroojlegorooj'
IV = b'legoroojlegorooj'

aes = Cipher(algorithms.AES(KEY), modes.CFB(IV), default_backend()).encryptor()
output_data = aes.update(b'Feathers fall as fast as bowling balls.') + aes.finalize()
del aes


ctr = AES.new(KEY, AES.MODE_CFB, iv=IV)
output_data2 = ctr.encrypt(b'Feathers fall as fast as bowling balls.')

assert output_data == output_data2 # AssertionError

任何解决此问题的帮助将不胜感激。

此代码可与 modes.OFB(IV)AES.MODE_OFB 配合使用。

最佳答案

CFB mode移位寄存器的大小必须指定,不同的库通常使用不同的默认值。为了区分,通常在CFB后面附加移位寄存器的大小(以位为单位),即CFB8使用8位移位寄存器,CFB128使用128位移位寄存器。

Cryptography有 CFB8 和 CFB128 两种变体,后者简称为 CFB。 PyCryptodome允许使用参数segment_size设置8位的整数倍,默认值为8位。

因此,在当前代码中,Cryptography 使用 CFB128,PyCryptodome 使用 CFB8(其默认值),这会导致不同的结果。

以下组合有效:

  • PyCryptodomesegment_size=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 使用 segment_size=8(默认值),Cryptography 使用 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 库为 OFB mode 提供相同的结果。 ,因为两者都使用 OFB128。 (2) CFB128 比 CFB8 更快:在 CFB8 中,每个 block 必须调用 AES 加密 16 次,而 CFB128 中为 1 次。

关于python - PyCryptoDome/Python 中 AES-CFB 的加密不等式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59712935/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com