Похоже, у вас есть традиционная работа по сокрытию данных: у вас есть информация (список имен файлов), которую вы хотите защитить от посторонних глаз. Предположительно информация должна быть доступна людям, которым вы не доверяете (иначе зачем скрывать ее?), Но она все же должна быть доступна для вашей программы.
Предположительно, вы не хотите помещать свои данные в файл с именем "Important-file-names.txt"; вы, вероятно, встроили его в свою программу. Этого недостаточно, потому что плохие парни могут запустить strings
и найти имена файлов. Существует много способов кодирования данных, но если вашей программе необходимо использовать эти данные, то у нее должен быть способ декодировать данные (и ключ декодирования). Неважно, как вы кодируете / декодируете данные - в конечном итоге ваша программа будет иметь реальные имена файлов в памяти и захочет что-то сделать с именами файлов (предположительно, открыть их, прочитать / записать их, возможно, удалить их) - - в какой момент вы облажались. Методы отличаются в зависимости от ОС, но всегда можно проверить ресурсы, используемые данной программой, будь то файлы, сетевые подключения или даже ОЗУ. Достаточно решительный человек найдет вашу информацию.
Да, вы можете скрыть данные, но реальный вопрос: как долго вы ожидаете, что данные останутся скрытыми?
Если все, что вы ожидаете сделать, это предотвратить случайный просмотр пользователем, тогда, вероятно, подойдет простой XOR с ключом, который не является текстовой строкой. Кроме того, все, что вы делаете, это пытаетесь замедлить работу эксперта, который, вероятно, лучше в этом, чем вы.
[Добавлено более простое объяснение]
Простейший шифр - это шифр замещения, где каждая буква простого текста отображается на другую букву шифрованного текста. Самым старым из них является так называемый шифр Цезаря, где зашифрованный текст представлял собой простой текст с буквами, сдвинутыми на два символа (A-> C, B-> D, C-> E), так что HELLO становится IGNNP когда зашифровано. Проблема с подстановочным шифром заключается в том, что не все буквы используются в словах единообразно, и не все слова используются в предложениях единообразно. Анализируя шаблоны букв и слов в заданном фрагменте зашифрованного текста, вы можете вывести простой текст. (Ежедневная криптограмма работает таким образом.) Если вам нужно XOR для каждой отдельной буквы в простом тексте одним байтом (0x80 или 0x96), это будет иметь тот же эффект, что и простой шифр.
Таким образом, следующий лучший шифр - это тот, в котором вы используете множество разных шифров вместо одного. Используя ключ и кодируя первую букву обычного текста первой буквой ключа, вторую букву обычного текста второй буквой ключа и оборачивая ключ, если он длиннее сообщения, вы получите немного более сложную задачу. шифр.
plain text => THIS IS A TEST OF THE EMERGENCY BROADCAST SYSTEM
message key => JUBI LE E JUBI LE EJU BILEEJUBI LEEJUBILE EJUBIL
cipher text => EDLC VY G EAVD BL ZSA HWRXMPJFI OXULZFKFZ YJOWOZ
Я использую простую схему вращения букв и пропуски пробелов, чтобы это было легко понять. На практике вы не будете пропускать пробелы, вы будете использовать более длинный не алфавитный ключ и будете использовать более сложную функцию кодирования. XOR - популярная функция кодирования, потому что она симметрична. Вы хотите использовать не-ASCII ключ, потому что вы хотите что-то, что сливается с фоном в двоичном исполняемом файле. У этого также будет больше шансов генерировать зашифрованный текст, который не является простой текстовой строкой. Как я писал ранее, истинно решительному злоумышленнику не нужно взламывать ваш шифр - он взломает вашу программу; Это просто для того, чтобы не пускать любителей.