Я зашифровал много текста, в результате чего:
const char* encrypted[] = {
"ꖟ럵꼹ᐦෑ䵖","ꗹモ拧ᔞ诞凲ḏ","瞗긚⧿숯塚","輶䖙挿斃ぁ忋","掂䉧딻䠕᭖嬽핹ճ","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋","ㄿ爛泰먅轭➊㻎⌧","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋",
"욊蚘坸ꭤ䱤㇔鸽","욊蚘坸ꭤ䱤㇔鸽","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋","䀴♃�ハ狥䖢","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋"
}
Проблема в том, что Visual Studio 2013 дает всевозможные ошибки. Я изменил кодировку на UTF-8 без спецификации, иначе компилятор сразу же сработает, если я попытаюсь его скомпилировать. Он дает всевозможные ошибки с текстом, например: "0x80": этот символ не разрешен в идентификаторе. Я попытался добавить в u8 перед текстом, чтобы сделать его UTF-8, например: u8"ꖟ럵꼹ᐦෑ䵖"
только для получения ошибки: идентификатор u8 не найден
Есть ли способ успешно загрузить зашифрованный текст в исходный код?
Проблема в том, что AES производит вывод, который не отличается от случайного. В основном это означает, что любой байт может содержать любое значение. Однако не все байтовые значения являются действительными кодировками символов. В основном вы просите систему преобразовать двоичный код обратно в символы, в то время как двоичный код никогда не был создан из символов в первую очередь.
Случается, что непризнанные байтовые кодировки молча удаляются. То же самое может произойти с непечатаемыми символами, такими как символы ниже кода кода Unicode 0x20 (32). Таким образом, в конечном итоге его декодирование на строку и кодирование обратно в байты приведет к потере данных. Разумеется, эта потеря данных происходит случайным образом; для более короткого зашифрованного текста вам может быть повезло и вообще не потерять данные.
Теперь, если вам нужна строка вообще, ответ заключается в использовании кодировки, которая кодирует двоичный код в строку и обратно без потерь. Для относительно эффективного кодирования (4 символа для каждого 3 байта) большинство разработчиков переходят на base64. Если вы просто хотите отображать некоторые более мелкие значения, то гексадецималы будут иметь преимущество в том, что их легче читать глазами человека (по 2 символа для каждого байта). Для тестового кода для зашифрованного текста, ключей и IV в коде я лично всегда предпочитаю hexadecimals, так как легко видеть/вычислять размер.
В таких языках, как C/C++, вы также можете кодировать все в unsigned char*
используя \xXX
. Я предупреждал бы о таких практиках, как он призывает вас использовать строковые функции, такие как strlen
. Это, конечно, проблема, если используются строки с нулевым завершением. Постарайтесь постоянно различать символы и байты, даже если язык не работает. Лучшей альтернативой является использование char[]
(и sizeof
вместо strlen
).
wchar_t
или сделайте каждый символ escape-последовательностью.