简单加密和解密TXT文件[C ++]

时间:2017-07-22 20:25:31

标签: c++

所以我试图通过改变字符来创建某种加密和解密文本。 这是我的代码:

string row;
string fileName = "NULL";

const string encrypt[63] = { "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
                        "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",
                        "0","1","2","3","4","5","6","7","8","9" " " };
const string decrypt[63] = { "!","@","#","$","%","^","&","*","(",")","_","-","|","~","`",":", "/", "<", ">", ".",
                        "q","w","e","r","t","y","u","i","o","p","a","s","d","f","g","h","j","k","l","z","x","c","v","b","n","m",
                        "Q","W","E","R","T","Y","U","I","O","P","A","S","D","F","G","H","J" };

printf("Would you like to read or write file ?");
cin >> row;

printf("What the Name of the File?");
cin >> fileName;

if (row._Equal("write") || row._Equal("Write"))
{
    ofstream file(fileName + ".txt");
    string text;

    if (file.is_open())
    {
        printf("What Text You Like To Encrypt?");
        cin.ignore();
        getline(cin, text);

        string nText;

        for (size_t i = 0; i < text.length(); i++)
        {
            int num = NULL;
            num = text.find(text.find(encrypt[i]));
            if (num != NULL) {
                nText.append(decrypt[num]);
            }
            num = NULL;
        }

        file << nText;
        file.close();
    }
}

else if (row._Equal("read") || row._Equal("Read"))
{
    string text;
    ifstream file(fileName + ".txt");

    if (file.is_open())
    {
        string nText;

        while (getline(file, text))
        {
            for (size_t i = 0; i < text.length(); i++)
            {
                //Almost Same with Encrypt.
            }
        }

        printf("\nDecrypted File: %s \n", text.c_str());

        file.close();
    }

}

现在我知道For循环(for循环的内容)是我的问题。 在开始时,我试图替换字符,但我有替换功能的问题所以我试图创建一个新的字符串来附加我的加密/解密。

但我一直收到调试错误,说'abort()已被调用'。 我不知道如何解决它... 谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

我设法让它像这样工作:

        for (size_t i = 0; i <= text.length(); i++)
        {
                for (int j = 0; j <= 63; j++)
                {
                    if (text[i] == encrypt[j])
                    {
                        nText += decrypt[j];
                    }
                }
        }