当XOR加密字符串并将其保存在文本文件中时,PC会发出蜂鸣声

时间:2014-05-30 09:41:05

标签: c++ encryption xor beep

我使用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()

由于

2 个答案:

答案 0 :(得分:3)

encrypted将包含不可打印的字符,因此当您将它们打印到控制台时,您会将一些垃圾发送到控制台。

其中一些垃圾显然是ASCII码0x07 / ^G / BEL,导致控制台发出哔哔声。

要解决此问题,请不要打印encrypted,或以不可打印字符过滤或格式化为十六进制或其他内容的方式进行打印。

答案 1 :(得分:1)

我猜你加密的字符串,管道到标准输出,包含字符0x07的三倍,别名&#34;贝尔&#34;。