从基本视图中隐藏字符串(例如记事本) 我试图在我的C++程序中隐藏一些字符串,我注意到如果我的“程序”打开了(例如:记事本),人们可以查看字符串,编辑值,然后保存,然后重新运行包含更改字符串的程序,并且编辑的字符串将取代我的原始文本。

从基本视图中隐藏字符串(例如记事本) 我试图在我的C++程序中隐藏一些字符串,我注意到如果我的“程序”打开了(例如:记事本),人们可以查看字符串,编辑值,然后保存,然后重新运行包含更改字符串的程序,并且编辑的字符串将取代我的原始文本。,c++,C++,我不寻找任何非常先进的东西,因为事实上我只是试图阻止人们编辑在记事本中打开“程序”时可以轻松查看的文本,我不是试图阻止任何“黑客”这样做,只是试图在我的“程序”中编辑文本 我试过这样的方法: char hiddentxt[10]; strcat(hiddentxt,"h"); strcat(hiddentxt,"e"); strcat(hiddentxt,"l"); strcat(hiddentxt,"l"); strcat(hiddentxt,"o"); 但是,我敢肯定,当涉及到巨大的字符串

我不寻找任何非常先进的东西,因为事实上我只是试图阻止人们编辑在记事本中打开“程序”时可以轻松查看的文本,我不是试图阻止任何“黑客”这样做,只是试图在我的“程序”中编辑文本

我试过这样的方法:

char hiddentxt[10];
strcat(hiddentxt,"h");
strcat(hiddentxt,"e");
strcat(hiddentxt,"l");
strcat(hiddentxt,"l");
strcat(hiddentxt,"o");
但是,我敢肯定,当涉及到巨大的字符串时,这是非常耗时的(注意:显然这不是一种隐藏字符串的“安全”方法,但请注意,我并不是要阻止黑客编辑字符串,只是那些不知道自己在做什么的人)

我也研究过使用异或,但在我的例子中,它似乎不是一个好的解决方案

任何帮助都将不胜感激

字母表编号/字母表中的位置 您可以将字母表中的每个字母转换为该字母所在的数字

  • a=1
  • b=2
  • z=26
这个程序是一个快速的“工具”做这种类型的编码。将其与实际项目分开。
另存为:MyStringEncoder.cpp并编译

这是脆弱的,不仅因为它可以很容易地被暴力强迫。但也因为如果你把英语中最常用的字母(‘e’)和密码中最常用的字母,你已经有了26个字母中的一个

笔记 但是,请注意,这两种方法都很弱且不安全。 您试图做的是通过模糊处理实现安全性。并建议


您可能感兴趣的另一件事是。

在键盘上将每个字符替换为其右侧的字符。然后“hello”变成“jr;;p”。(最右边的字符变为最左边的字符,即“/”变为“z”)。实现解码函数,然后使用常量,即,代替

print("Hello world\n");
你需要

static const char* sz_hello_world = decode("Jr;;p ept;f\n");
printf(sz_hello_world);
不应触摸诸如“\n”或“”之类的特殊字符


警告:由于解码函数将分配内存,因此每次解码只需调用一次,以避免内存泄漏。这就是为什么您需要
静态常量

随机想法的原因:每个字节值+=128(使用无符号变量防止UB),它被调用,但从未真正工作过。如果你想让你的字符串“不可读”,那么将它们存储在一个单独的加密文件中。这可能是与其他能看到你的代码的人的奇怪关系的重复吗?@JoachimPileborg,就像我说的,我并没有试图阻止任何有编程经验的人更改文本值,只是人们打开我的C++文件,比如记事本,我不知道为什么会有人?谢谢你提供的信息,这回答了我的问题:)@JeffCoderr很高兴听到这个消息很高兴我能帮助你。如果你想做简单的加密,很容易实现,那么使用XXTEA可能比rot13更好,因为rot13非常容易破解。XXTEA至少会让脚本小子们忙上几分钟,而不是几秒钟;)
#include <iostream>
#include <string>
#include <sstream>
#include <vector>

using namespace std;

//Function to encrypt
string toCaesar(string s, int key) {
    string alphabet = "abcdefghijklmnopqrstuvwxyz";

    for (int i = 0; i < s.length(); i++) {
        for (int j = 0; j < alphabet.length(); j++) {
            if (s[i] == alphabet[j]) {
                int index = j + key;
                if (index >= 26) index = index - 26;
                s[i] = alphabet[index];
                break;
            }
        }
    }

    return s;
}

//Function to decrypt
string decryptCaesar(string s, int key) {
    string alphabet = "abcdefghijklmnopqrstuvwxyz";

    for (int i = 0; i < s.length(); i++) {
        for (int j = 0; j < alphabet.length(); j++) {
            if (s[i] == alphabet[j]) {
                int index = j - key; //Only difference is the MINUS here
                if (index >= 26) index = index - 26;
                s[i] = alphabet[index];
                break;
            }
        }
    }

    return s;
}

int main() {
    int inputKey;
    string stringToEncrypt;

    cout << "Give your key: ";
    cin >> inputKey;
    cout << "String to encrypt: ";
    cin >> stringToEncrypt;

    cout << toCaesar(stringToEncrypt, inputKey) << endl;
    cout << decryptCaesar("fgh", 5);
}
print("Hello world\n");
static const char* sz_hello_world = decode("Jr;;p ept;f\n");
printf(sz_hello_world);