输出字符串包含奇怪的字符

Output string contains weird characters

本文关键字:字符 包含奇 字符串 输出      更新时间:2023-10-16

此代码对字符串进行加密并输出加密的结果。但是,它会输出我不理解的字符,比如]^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。