2011-12-22 5 views
3

Я пытаюсь получить somepython код для дешифрования данных, которые были зашифрованы с использованием API OS X CommonCrypto. Документация о точных параметрах, которые использует CommonCrypto, практически отсутствует, поэтому мне нужна помощь в определении того, какие параметры установить в PyCrypto.Совместимость PyCrypto с CommonCrypto в режиме CFB?

В частности, мой CommonCrypto установка дешифрования вызов:

CCCryptorCreateWithMode(kCCDecrypt, kCCModeCFB, kCCAlgorithmAES128, ccDefaultPadding, NULL, key, keyLength, NULL, 0, 0, 0, &mAESKey); 

Мои основные вопросы:

  1. Поскольку существует как kCCModeCFB и kCCModeCFB8, что определение CommonCrypto о режиме CFB - какой сегмент размер и т. д.?
  2. Какой размер блока используется в CommonCrypto AES128? 16 или 128?
  3. Что такое заполнение по умолчанию, и имеет ли он значение даже в режиме CFB?

В настоящее время первые 4 байта данных успешно дешифруются с помощью PyCrypto *, пока я установил segment_size в 16 *.

Идеи?

+0

В качестве примечания, M2Crypto отлично работает с дешифровкой данных, поэтому у него * есть *, чтобы быть вопросом типа вопроса или тому подобное. – Loki

+0

В последнее время я работаю над этим с тем же вопросом. Вы нашли какой-либо способ или образец кода для этой проблемы. –

ответ

1

Не зная CommonCrypto или PyCrypto, некоторые частичные ответы:

  • AES (во всех трех вариантах) имеет размер блока 128 бит, которые 16 байт.

  • CFB (режим шифра обратной связи) будет фактически работать без дополнения (т.е. с частичным последним блоком), так как для каждого блока зашифрованного текст создаются как XOR открытого текста с некоторой гаммой блоком, который зависит только от предыдущего блоки. (Вы все еще можете использовать любое дополнение, которое вы хотите.)

    Если вы можете поэкспериментировать с некоторыми известными данными, сначала посмотрите размер зашифрованного текста. Если он не кратен полному блоку (и тому же, что и открытый текст + IV), то, скорее всего, нет отступов.

    В противном случае расшифруйте его с помощью режима noPadding, посмотрите на результат и сравните его с различными известными режимами заполнения.

    От glance at the source code это может быть PKCS # 5-padding.

  • CFB8 - это вариант CFB, который использует только верхние 8 бит (= один байт) каждого выходного сигнала шифрования блока (который принимает предыдущих 128 бит (= 16 байтов) зашифрованного текста (или IV) в качестве входного). Это требует в 16 раз больше вызовов блочного шифрования, но допускает частичную отправку потока без необходимости беспокоиться о границах блоков.

  • Существует еще одно определение CFB который включает в себя размер в сегмент - здесь размер сегмента является количество битов (или байт), которые будут использоваться с каждого шифра выхода. В этом определении «простой» CFB будет иметь размер сегмента 128 бит (= 16 байт), CFB8 будет иметь размер сегмента 8 бит (один байт).