我使用 XOR 加密我写入文本文件的选项,并在读入时解密它们。
下面是加密选项并将它们写入文件的代码:
Settings settings;
const char key = 'x';
std::stringstream ss;
std::string original = "";
std::string encrypted = "";
std::ofstream file("./data/options.txt");
if (file.good()) {
file.clear();
// Build options string
ss << "limitfps=" << (settings.getLimitFramerate() ? "1" : "0") << std::endl;
ss << "fps=" << settings.getFramerateLimit();
// etc...
// Encrypt
original = ss.str();
for (std::size_t temp = 0; temp < original.size(); ++temp) {
encrypted += original[temp] ^ (static_cast<int>(key) + temp) % 255;
}
// Print and write to file
std::cout << "Saving encrypted data to file:\n" << encrypted << std::endl;
file << encrypted;
file.close();
}
一切正常,但我的电脑出于某种原因发出 3 声哔哔声。如何让它不发出哔哔声?
因为它在代码中,所以另一个问题:我不需要最后的 file.close()
,对吧?我读到当到达范围末尾时会自动调用 close()
?
谢谢
最佳答案
encrypted
将包含不可打印的字符,因此当您将它们打印到控制台时,您会收到一些发送到控制台的垃圾。
其中一些垃圾显然是 ASCII 代码 0x07
/^G
/BEL
,这会导致控制台发出哔哔声。
要解决此问题,要么不打印 encrypted
,要么以过滤掉不可打印字符或格式化为十六进制或其他格式的方式打印它。
关于c++ - XOR 加密字符串并将其保存在文本文件中时 PC 发出哔哔声,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23951460/