Я использую 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
или распечатайте его так, чтобы непечатные символы отфильтровывались или форматировались как шестнадцатеричные или что-то в этом роде.
Я предполагаю, что ваша зашифрованная строка, которую вы передаете на стандартный вывод, содержит три раза символ 0x07, псевдоним «Bell».