2016-06-23 3 views
0

Мой сервер шифрует файлы с использованием pycrypto с AES в режиме CTR. Мой счетчик простой счетчик, как это:Расшифровать шифрованный текст, зашифрованный с помощью PyCrypto с использованием cryptopp

\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01 
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02 
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03 

Я хочу расшифровать зашифрованный текст С ++ библиотеки cryptopp в моих клиентов. Как мне это сделать?

код Python:

encryptor = AES.new(
    CRYPTOGRAPHY_KEY, 
    AES.MODE_CTR, 
    counter=Counter.new(128), 
) 
cipher = encryptor.encrypt(plain_text) 

C++ код до сих пор:

byte ctr[] = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" 
mDecryptor = new CryptoPP::CTR_Mode<CryptoPP::AES>::Decryption(key, 32, ctr); 
std::string plain; 
CryptoPP::StringSource(std::string(data, len), true, new CryptoPP::StreamTransformationFilter(*mDecryptor, new CryptoPP::StringSink(plain))); 

, но после того, как работает этот plain мусор.

Update:

Sample зашифрованные данные можно попытаться расшифровать с крипто ++, так что вы можете мне помочь, даже если вы не знаете, питона и вы просто опытный с крипто ++:

Try расшифровать эту base64 закодированный текст:

2t0lLuSBY7NkfK5I4kML0qjcZl3xHcEQBPbDo4TbvQaXuUT8W7lNbRCl8hfSGJA00wgUXhAjQApcuTCZckb9e6EVOwsa+eLY78jo2CqYWzhGez9zn0D2LMKNmZQi88WuTFVw9r1GSKIHstoDWvn54zISmr/1JgjC++mv2yRvatcvs8GhcsZVZT8dueaNK6tXLd1fQumhXCjpMyFjOlPWVTBPjlnsC5Uh98V/YiIa898SF4dwfjtDrG/fQZYmWUzJ8k2AslYLKGs= 

с этим ключом:

12341234123412341234123412341234 

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

Update2: Я не предоставляю код IV в коде python, модуль python игнорирует IV. Я - это то, что вызывает проблему.

+0

Я вижу, поэтому в CTR нет начального вектора или лучше сказано, что он заменен счетчиком/nonce в CTR. (Я предполагаю, что слэш здесь означает, что они оба в случае CTR), правильно? – Sassan

+0

Если да, то я понятия не имею, почему код C++ не расшифровывает шифрованный текст. – Sassan

+0

Также я прочитал статью в википедии, которую вы указали не менее 5 раз: «Если IV/nonce является случайным, то они могут быть объединены вместе с счетчиком, используя любую операцию без потерь (конкатенация, добавление или XOR) для создания фактического уникальный блок счетчика "он предполагает, что IV/nonce одинаково, и ДОПОЛНИТЕЛЬНО их можно комбинировать со счетчиком, поэтому я пришел к выводу, что библиотека C++ использует (комбинировать) IV/nonce, а библиотека python - нет. – Sassan

ответ

0

Поскольку я читаю их исходники, я могу сказать PyCrypto и Crypto ++. Оба являются идеальными библиотеками для криптографии для Python и C++. Проблема заключалась в том, что я префикс зашифрованных данных с некоторой метаинформацией о файле, и я полностью забыл об этом, после обработки этих метаданных в клиенте Crypto ++ расшифровал мои файлы.

Поскольку я не нашел это документально зафиксированным в любом месте (даже в Википедии), я пишу его здесь: Любая комбинация Nonce, IV и Counter, такой как конкатенация, xor или нравится, будет работать в режиме CTR, но стандарт что большинство библиотек реализуют, это объединить эти значения в порядок. Таким образом, значение, которое используется в алгоритме блочного шифрования, обычно: Nonce + IV + Counter. И счетчик обычно начинается с 1 (не 0).

+0

«Nonce» - просто другое имя для «IV», поэтому «Nonce + IV + Counter» не имеет большого смысла. Обратите внимание, что nonce должно отличаться для каждого шифрования при использовании одного и того же ключа. В противном случае вы даете злоумышленнику много времени. Общий размер для nonce - 96 бит, а остальные 32 бит - для счетчика. –

+0

Ну, как вы можете видеть в этом документе ietf: http://tools.ietf.org/html/rfc3686#page-9 есть разные поля для «nonce» и «iv», в источниках pycrypto и cryptopp было 2 переменные для хранения nonce и iv, поэтому на основе выше 3 ссылок, которые имеют отношение к nonce, iv и counter точно так же (у pycrypto и cryptopp есть тесты, встроенные в исходный код, который запускает упомянутые тесты rfc3686). Я думаю, что «Nonce» - это не просто другое имя для "IV". Насколько я понимаю, у разных криптографов есть разные предположения об этих терминах. – Sassan

+0

читайте это: http://crypto.stackexchange.com/questions/3965/what-is-the-main-difference-between-a-key-an-iv-and-a-nonce – Sassan

Смежные вопросы