c++ - XOR 加密字符串并将其保存在文本文件中时 PC 发出哔哔声

标签 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()

谢谢

最佳答案

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

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

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

关于c++ - XOR 加密字符串并将其保存在文本文件中时 PC 发出哔哔声,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23951460/

相关文章:

c# - 使用枚举上的 XOR 运算符重载 GetHashCode 和相等运算符

c++ - C++ 函数声明末尾的 Const

c++ - 我正在尝试使用 vector 迭代器创建一个 for 循环

.net - 如何查看 RSA key 容器的权限

amazon-web-services - 我们应该如何使用 Cloudformation Template 更新 S3 存储桶上的默认加密?

c - 在 C 中解码密文时出现大小问题

c++ - 在哪里可以找到所有数学函数的描述,比如 floorf 和其他函数?

c++ - 为什么在这种情况下 memset 会失败?

c - C for Linux 中的公钥实现

java - 异或 Java 代码