在Visual Studio中的源代码
把亚洲和其他字符我已经加密了大量的文字,导致此:在Visual Studio中的源代码
const char* encrypted[] = {
"ꖟ럵꼹ᐦෑ䵖","ꗹモ拧ᔞ诞凲ḏ","瞗긚⧿숯塚","輶䖙挿斃ぁ忋","掂䉧딻䠕᭖嬽핹ճ","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋","ㄿ爛泰먅轭➊㻎⌧","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋",
"욊蚘坸ꭤ䱤㇔鸽","욊蚘坸ꭤ䱤㇔鸽","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋","䀴♃�ハ狥䖢","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋","輶䖙挿斃ぁ忋"
}
问题是,Visual Studio的2013年给它有关的各种错误。我已经将编码更改为没有BOM的UTF-8,否则编译器会立即崩溃,如果我尝试编译它。它给文本提供了各种错误,例如:'0x80':这个字符在标识符中是不允许的。我试图在文本之前添加u8,使其为UTF-8,例如:u8"ꖟ럵꼹ᐦෑ䵖"
只能给出错误:未找到u8标识符
有没有一种方法可以将加密文本成功加载到源代码中?
问题是AES产生的输出与随机无法区分。基本上这意味着任何字节都可以包含任何值。不是所有的字节值都是有效的字符编码。基本上你要求系统把二进制转换回字符,而二进制不是从字符开始构建的。
会发生什么情况是无法识别的字节编码被无声地删除。 不可打印的字符(如Unicode代码点0x20(32)以下的字符)可能会发生同样的情况。因此,最终将其解码为字符串并将其编码回字节将导致数据丢失。这种数据丢失当然也是随机发生的;对于较短的密文,你可能是幸运的,根本没有数据丢失。
现在如果你需要一个字符串,那么答案就是使用编码将二进制编码为字符串,然后再返回而不会丢失。对于一个相对有效的编码(每3个字节4个字符),大多数开发人员会使用base64。如果你只是想显示一些较小的值,那么十六进制将具有易于被人眼读取(每字节2个字符)的优点。对于密文的测试代码,密码和IV代码我个人总是更喜欢十六进制,因为它很容易看到/计算大小。
在诸如C/C++的语言中,您还可以使用\xXX
对unsigned char*
中的所有内容进行编码。我会警告这种做法,因为它会哄你使用字符串函数,如strlen
。如果使用空终止的字符串,这当然是一个问题。尽量保持字符和字节之间的明确区分,即使语言没有。更好的选择是使用char[]
(和sizeof
而不是strlen
)。
使用'wchar_t'或使每个字符成为转义序列。 – 2014-12-27 15:53:37
好吧我会这样做 – 2014-12-27 16:02:56
加密的输出不是一个有效的字符串,所以你不应该把它存储为一个char数组。如果你必须把它变成一个有效的字符串,你需要对它进行编码。 Base64编码是大多数应用程序的标准选择。 – 2014-12-27 18:30:25