此代码对字符串进行加密并输出加密。但是,它会输出我不理解的字符,如^ 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);
}
这些角色是什么?
答案 0 :(得分:2)
因为你对消息和键字符串的各个字符进行了按位xor。由于按位运算符不一定会产生可打印字符,因此您将获得非打印字符。
答案 1 :(得分:2)
// And now for the encryption part
for (string::size_type i = 0; i < msg.size(); ++i)
msg[i] ^= key[i]; // msg[i] ^ key[i]
字符的按位XOR(ASCII值)可能会导致可打印和不可打印的字符,具体取决于值。
答案 2 :(得分:1)
您使用Bitwise XOR。这可能导致32位以下的ASCII字符(32为空格和第一个可打印的ASCII字符)。 如果您希望它是可打印的,您可以在Base64中对结果进行编码或更改加密,以使结果不能低于32。