Возможно ли взломать стандартный XOR-шифр?
Зная, что это:
* # (I @ К.И.
кодируется с помощью функции XOR
//
std::string CStringCoding::Xor( const std::string& strIn )
{
std::string sOut = "";
for(std::size_t loop = 0; loop < strIn.size(); loop++)
{
unsigned int iCharacter = static_cast<unsigned int>(strIn[loop] ^ sKey[loop % sKey.size()]);
sOut += iCharacter;
}
return sOut;
}
Могу ли я брутфорс с классическим подходом к списку слов?
Я думал о:
Сгенерировать список слов KEY
XOR *# (I @ К.И. с ключом, чтобы расшифровать его и получить строку
XOR STRING с ключом, чтобы шифровать его
Сравните недавно зашифрованную строку с входной зашифрованной строкой
Если они совпадают, ключ был найден
Я не проверял это, просто спрашивал, прежде чем я предприму действия и потрачу слишком много времени на то, что не сработает.
Благодарю.
Предполагая, что вы шифруете значимый читабельный текст, это можно сломать XOR шифр если злоумышленник будет иметь:
Частотный анализ может сломать оба случая.
Но это нормально для передачи открытого текста с действительно случайным ключом той же длины, что и сообщение. Это будет небьющийся шифр Одноразовый блокнот
OTP невосприимчив даже к атакам грубой силы. Просто попробуйте все ключи
дает все открытые тексты, все равно могут быть фактическим открытым текстом
Что вы подразумеваете под «шифром XOR»? Как сказал @varren, One Time Pad не ломается. Тем не менее, большинство шифров XOR в реальном использовании не являются OTP, а Потоковые шифры, такие как RC4. Эти шифры можно взломать, потому что ключ (как правило) короче сообщения, а поток ключей не является истинно случайным, а псевдослучайным. Потоковые шифры могут быть атакованы перебором, поскольку они не соответствуют требованиям для One Time Pad.