В режиме CFB необходимо указать размер регистра сдвига, при этом разные библиотеки часто используют разные значения по умолчанию. Для различия размер сдвигового регистра в битах часто добавляется к CFB, т.е. CFB8 использует сдвиговый регистр 8 битов, а CFB128 - сдвиговый регистр 128 битов.
Криптография имеет два варианта CFB8 и CFB128, где последний просто называется CFB. PyCryptodome позволяет устанавливать целочисленные кратные 8 битам, используя параметр segment_size
со значением по умолчанию 8 бит.
То есть в текущем коде Криптография использует CFB128, а PyCryptodome использует CFB8 (значение по умолчанию), что приводит к различным результатам.
Работают следующие комбинации:
PyCryptodome с segment_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
(значение по умолчанию) и Криптография с 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 , поскольку обе используют OFB128 , (2) CFB128 быстрее, чем CFB8: в CFB8 шифрование AES должно вызываться 16 раз для каждого блока против 1 раза в CFB128.