Я не верю, что можно [сказать, если ключ является правильным], с только контексте AES.
т. Е. Вы не можете, кроме как путем проверки формата и/или некоторого значения дайджест-сообщения для чистого текста после его декодирования, что подразумевает, что вы знаете такую структуру или дайджест сообщения.
Хотя это просто следствие того, как устанавливается алгоритм/протокол, одним из преимуществ этого является то, что это делает атаки с использованием грубой силы на таких шифрах более сложными, потому что нужно взять время и декодировать не менее часть сообщения, а также передать его через ясный текстовый детектор. Четко-текстовый детектор представляет собой некоторую логику, которая имеет априорное/угаданное понимание природы открытого текста и которое может определить, соответствуют ли данные ожидаемому; например, простой детектор может проверить, что первые 20 байтов - US ASCII). Это особенно полезно при использовании нескольких схем кодирования, таких как тройной DES, где нет понятия (у гениев криптоанализа может быть мягкая идея ...) того, как выглядят промежуточные «четкие тексты».
Редактировать: ответить на вопросы Op в тех
Да, если вы не уверены в том ключе, вы должны сделать копию шифротекста, прежде чем пытаться получить его декодируется нот. Он будет возвращаться как реальная тарабарщина (и не легко обратимая, если вообще), если она декодируется с неправильным ключом.
Чтобы ввести способ определения достоверности декодированного сообщения, как для бинарных и ASCII/текстовых сообщений, вы можете использовать вариацию на следующей концепции «envellope».
Примечание: Это может [мягко] ослабить силу вашей криптографической установки.
Предполагается, что у вас есть контроль или совместная работа над процессом кодирования. Это работает как для ASCII, так и для двоичного содержимого.
Идея состоит в том, чтобы добавить в сообщение префикс («заголовок») и, возможно, суффикс («трейлер»). Чтобы быть криптографически более безопасным, такой префикс должен быть достаточно длинным (скажем, 500 байт?), И большая часть его контента носит случайный характер. Затем вам нужно будет вставить фактическое сообщение в этот «конверт» и подтвердить правильность/целостность конверта после decription. Ориентировочный пример:
17 random bytes
2 bytes length of this header (allows to have a variable length header)
1 byte offset to "fingerprint"
x random bytes
fingerprint = a short binary (preferably) or ascii constant text "MyDataIsOk"
[optionally: length of the payload and/or a CRC/MD5/digest-of-sort for it]
y random bytes
followed by the actual message
Упрощенный (но немного «опасный» для крипто) просто добавить, скажем, «MyDataIsGood123ABC» перед данными. Во время дешифрования вы должны убедиться, что дешифрованный поток начинается с этих 16 байтов байтов, и вы удалите их, чтобы получить фактическое сообщение.
Thx, тест ASCII, вероятно, будет делать, любая идея, как я бы проверить, если бинарный файл зашифрован? Если нет, мне нужно будет написать какой-то тестовый пример, прежде чем продолжить весь файл? – zyrus001
Будет ли создание тестового примера в моем коде сделать шифрование бессмысленным? т.е. если cipher.decrypt (s) == 'Flag': «Правильный ключ»: - мне нужно избегать разрушения данных, если ключ неверен. – zyrus001
@ zyrus001 см. В редакции с идеей подтверждения достоверности/целостности сообщения. Кроме того, да, вам нужно будет сделать копию зашифрованного текста, если вы не уверены в ключе. – mjv