使用C ++中的ASCII加密和解密

时间:2016-09-26 20:03:04

标签: c++ ascii

由于我是编码c ++的新手并且正在学习面向对象的课程,我需要一些帮助。对于这段代码,我想通过移动由1 ascii数字输入的所有文本来加密它,即a - > b,b->我想使用所有ascii值32 - 126但我无法弄清楚为什么当我尝试加密任何东西时我只得到一个“^”作为输出。

#include <iostream>
#include <string>
using namespace std;

void encrypt (string &encrypt)
{
    string encryption;

    for (int i = 0; i < encrypt.length(); i++)
    {
        encrypt[i]++;
        if (i > 126){
            encrypt  = i - 94;
        }
        else if (i < 32){
            encrypt = i + 94;
       }
    }
}

void decrypt (string decrypt)
{
    string decryption;

    for ( int i = 0; i < decryption.length(); i ++)
    {
        decryption[i]--;
        if (i > 126){
            decrypt  = i + 94;
        }
        else if (i < 32){
            decrypt = i - 94;
        }
    }
}

int main ()
{
    string option;
    string encryption1;
    string decryption1;
    cout << "Do you want to encrypt or decrypt? \n";
    cin >>  option;

    if (option == "encrypt")
    {
        cout << "What do you want to encrypt \n";
        cin.ignore();
        cin.clear();

        getline (cin, encryption1);
        encrypt ( encryption1);
        cout << encryption1 << " " << endl;
    }

    if (option == "decrypt")
    {
        cout << "What do you want to decrypt \n";
        cin.ignore();
        cin.clear();

        getline (cin, decryption1);
        encrypt ( decryption1);
        cout << decryption1 << " " << endl;
    }
    return 0;**

1 个答案:

答案 0 :(得分:0)

去年我在一级编程课上做了类似的事情。我们创建了一个基于Cesar密码体系结构的Vigenere密码。 有用的是首先创建一个0基,即如果你正在使用值a到b,从你先编码的每个字符中减去a,做数学,仔细检查该值是否在值(32到126 == 0到94)然后返回char + a。这意味着重写您的逻辑和函数以立即获取char而不是整个字符串。 至于为什么你得到&#39; ^&#39;作为您唯一的输出,&#39; ^&#39;的ACSII代码是94和你的代码:

for ( int i = 0; i < decryption.length(); i ++)
    {
        decryption[i]--;
        if (i > 126){
            decrypt  = i + 94;
        }
        else if (i < 32){
            decrypt = i - 94;
        }
    }
}

将整个字符串设置为char 94.设置i = 0然后说如果i小于32则字符串decrypt等于char 0 + 94,它等于94,等于&#39 ; ^&#39;