2014-12-27 2 views
0

Я зашифровано много текста, который привел в этом:Ввод азиатских и других символов в Visual Studio исходного кода

const char* encrypted[] = { 
"ꖟ럵꼹ᐦෑ䵖","ꗹモ拧ᔞ诞凲ḏ","᜷瞗긚⧿숯塚","輶䖙挿斃ぁ忋","掂䉧딻䠕᭖嬽핹ճ","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋","ㄿ爛泰먅轭➊㻎⌧","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋", 
"욊蚘坸ꭤ䱤㇔鸽","욊蚘坸ꭤ䱤㇔鸽","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋","䀴♃�ハ狥䖢","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋" 
} 

Проблема, Visual Studio 2013 дает все виды ошибок в отношении его. Я изменил кодировку на UTF-8 без спецификации, иначе компилятор сразу же сработает, если я попытаюсь его скомпилировать. Он дает всевозможные ошибки с текстом, например: «0x80»: этот символ не допускается в идентификаторе. Я попытался добавить в u8 перед текстом, чтобы сделать его UTF-8, например: u8"ꖟ럵꼹ᐦෑ䵖" только для получения ошибки: идентификатор u8 не найден

Есть ли способ успешно загрузить зашифрованный текст в исходный код?

+1

Используйте 'wchar_t' или создайте каждый символ escape-последовательности. –

+0

Хорошо, я сделаю это –

+0

Результат шифрования не является допустимой строкой, поэтому вы не должны хранить ее как массив символов. Если вы должны сделать это в правильной строке, вам необходимо закодировать ее. Кодировка Base64 является стандартным выбором для большинства приложений. –

ответ

1

Проблема в том, что AES производит выходные данные, которые не отличаются от случайных. В основном это означает, что любой байт может содержать любое значение. Однако не все байтовые значения являются действительными кодировками символов. В основном вы просите систему преобразовать двоичный код обратно в символы, в то время как двоичный код никогда не был создан из символов в первую очередь.

Что происходит, так это то, что незарегистрированные байтовые кодировки молча удаляются. То же самое может произойти с непечатаемыми символами, такими как символы под кодом Unicode 0x20 (32). Таким образом, в конечном итоге его декодирование на строку и кодирование обратно в байты приведет к потере данных. Разумеется, эта потеря данных происходит случайным образом; для более короткого зашифрованного текста вам может быть повезло и вообще не потерять данные.

Если вам нужна строка вообще, то ответ должен состоять в том, Для относительно эффективного кодирования (4 символа для каждого 3 байта) большинство разработчиков переходят на base64. Если вы просто хотите отображать некоторые более мелкие значения, то гексадецималы будут иметь преимущество в том, что их легче читать глазами человека (по 2 символа для каждого байта). Для тестового кода для шифрованного текста, ключей и IV в коде я лично всегда предпочитаю шестнадцатеричные, так как легко видеть/вычислять размер.

В таких языках, как C/C++, вы также можете кодировать все в unsigned char*, используя \xXX. Я бы предостерег от таких практик, поскольку он уговорил вас использовать строковые функции, такие как strlen. Это, конечно, проблема, если используются строки с нулевым завершением. Постарайтесь постоянно различать символы и байты, даже если язык не работает. Лучшей альтернативой является использование char[]sizeof вместо strlen).

Смежные вопросы