输出字符串包含奇怪的字符
Output string contains weird characters
此代码对字符串进行加密并输出加密的结果。但是,它会输出我不理解的字符,比如]^XC[^CEA^
当我通过调试器运行应用程序时,输出字符串包含这些字符,\x2\x1a\x1\x1e\x1c_R\x2
代码在这里
string key("fydfhjg74d2u1oj4134wq87uj97h31cx");
string encrypt(string msg, string key)
{
// Make sure the key is at least as long as the message
string tmp(key);
while (key.size() < msg.size())
key += tmp;
// And now for the encryption part
for (string::size_type i = 0; i < msg.size(); ++i)
msg[i] ^= key[i];
' return msg;
}
string decrypt(string msg, std::string key)
{
return encrypt(msg, key); // lol
}
int main()
{
ofstream appfile("C:\Users\123024594\Desktop\cas.txt", ios_base::app);
string message;
cout << "Input string to be ciphered: ";
cin >> message;
cin.get();
cout << std::endl;
appfile << "Ciphered string: " << encrypt(message, key);
}
这些字符是什么?
// And now for the encryption part
for (string::size_type i = 0; i < msg.size(); ++i)
msg[i] ^= key[i]; // msg[i] ^ key[i]
根据值的不同,字符(ASCII值)的逐位异或可以产生可打印和不可打印的字符。
因为您对消息和密钥字符串的各个字符执行逐位异或。由于按位运算符不一定会产生可打印字符,因此您得到的是非打印字符。
使用位异或。这可能导致32以下的ASCII字符(32是空格,是第一个可打印的ASCII字符)。如果你想打印它,你可以用Base64编码结果,或者更改加密,这样结果就不会低于32。
相关文章:
- 计算在同一位置至少包含一个常用字符的不同字符串对
- 无法将字符数组转换为包含 utf-8 字符的字符串
- 如何从 QString 中包含的十六进制值中获取 ASCII 字符?
- 常量数组如何在每个元素中只能包含字符,而 char* 数组能够指向每个元素中的字符串?
- VSCode C++调试文件名中包含中文字符的文件时插件损坏
- 有没有办法搜索向量的元素,<String>然后检查它是否包含特定的字符,如果它确实打印了它
- 尝试使用 indexOf 创建一个 if 语句来检查字符串是否包含字符.有一点麻烦
- 如何制作一个只包含字符的简单加载屏幕
- 如何检查字符串是否包含所有这些:数字、字母和特殊字符
- 如何比较文件中包含的下一个字符
- 是否可以将无符号字符数组reinterpret_cast到仅包含C++中无符号字符成员的结构指针
- 如何获取包含 NULL 字符的外壳代码字符串的长度
- 如果字符串向量包含字符'p',如何检查 c++
- C++ 检查 UTF8 字符串包含指定的字符
- 在 Windows 上,stat 和 GetFileAttributes 对于包含奇怪字符的路径失败
- 无法转换 .CATPart 文件.错误:输入文件路径似乎包含不支持的字符
- 字符串只包含有效的字符?
- 如果必须包含西里尔字符,如何将 char* 转换为 std::string?
- 当字符包含表情符号时如何比较字符?
- cout 打印的字符 [] 包含的字符数超过设置长度