Я не верю, что вы можете [сказать, правильный ли ключ], только с контекстом AES .
то есть вы не можете, кроме как путем проверки формата и / или некоторого значения дайджеста сообщения для открытого текста после его декодирования, что подразумевает, что вы знаете такую структуру или дайджест сообщения.
Хотя это всего лишь следствие того, как установлен алгоритм / протокол, одно из преимуществ этого состоит в том, что это затрудняет атаки методом "грубой силы" на такие шифры, потому что нужно потратить время и декодировать хотя бы часть сообщения, а также передать его через детектор открытого текста . Детектор открытого текста - это некоторая логика, которая имеет априорное / предполагаемое понимание природы открытого текста и которая может определить, соответствуют ли данные этому ожиданию; например, простой детектор может проверить, что первые 20 байтов являются US ASCII). Это особенно полезно с несколькими схемами кодирования, такими как тройной DES, где никто не имеет ни малейшего представления (хорошо, что гении криптоанализа могут иметь слабое представление ...) о том, как выглядят промежуточные "открытые тексты".
Редактировать : отвечать на вопросы ОП в примечаниях
Да, если вы не уверены в ключе, вам нужно сделать копию зашифрованного текста , прежде чем пытаться расшифровать его. Он вернется как настоящий тарабарщина (и не так уж легко обратим, если вообще будет), если он будет декодирован с неверным ключом.
Чтобы ввести способ определения достоверности декодированного сообщения как для двоичных, так и для ASCII / текстовых сообщений, вы можете использовать вариант следующего " envellope "Концепция.
Примечание. Это может [слегка] ослабить силу вашей криптографической установки.
Это предполагает, что у вас есть контроль или совместная работа над процессом кодирования. Это работает как для ASCII, так и для двоичного содержимого
Идея состоит в том, чтобы просто добавить к сообщению префикс («заголовок») и, возможно, суффикс («трейлер»). Чтобы быть криптографически более безопасным, такой префикс должен быть достаточно длинным (скажем, 500 байтов?) И иметь большую часть его содержимого случайного характера. Затем вам нужно будет вставить фактическое сообщение в этот «конверт» и подтвердить достоверность / целостность конверта после расшифровки. Примерный пример:
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 байтов, и удалите их, чтобы получить реальное сообщение.