使用加密密钥进行简单加密

时间:2019-01-31 10:34:53

标签: c++ encryption

我正在做简单的加密。我有一个叫做加密的功能(字符串文本,字符串encryption_key)。它应该用encryption_key的第一个字母替换文本的a,用第二个字母替换b,以此类推。我正在尝试使用ASCII值解决此问题。

我不确定我是否认为正确,但是我已经尝试过类似的方法:

void encryption(std::string text, std::string encryption_key){
    for(long unsigned int i=0; i< encryption_key.length();i++){
        char letter = encryption_key.at(i);
        for(char j = 'a'; j<='z'; j++){
            if(text.find(j) != std::string::npos){
                text.at(j)= letter;
            }
        }
    std::cout<<"Encrypted text: "<< text<<std::endl;
    }
}

抛出“ std :: out_of_range” what()实例后,我得到“终止调用”:basic_string :: at:__n(为101)> = this-> size()(为5)关闭此窗口...”

我首先尝试通过加密密钥字符并替换文本中的字符(a-z)是正确的想法吗?

3 个答案:

答案 0 :(得分:1)

修复:

auto pos = text.find(j);
if(pos != std::string::npos) {
    text[pos] = letter;
}

答案 1 :(得分:0)

您的代码修复为text.at(text.find(j)) = letter;

void encryption(std::string text, std::string encryption_key){
    for(long unsigned int i=0; i< encryption_key.length();i++){
        char letter = encryption_key.at(i);
        for(char j = 'a'; j<='z'; j++){
            if(text.find(j) != std::string::npos){
                text.at(text.find(j))= letter;
            }
        }
    std::cout<<"Encrypted text: "<< text<<std::endl;
    }
}

但是我相信,根据您的描述,该算法是错误的。

编辑: 不使用库就可以做到:

void encryption(std::string text, std::string encryption_key)
{
    for (int i=0; i<text.length(); i++)
    {
        for (char ch = 'a'; ch<='z'; ch++)
        {
            if (text[i] == ch)
            {
                text[i] = encryption_key[ch-'a'];
                break;
            }
        }    
    }

    std::cout<<"Encrypted text: "<< text<<std::endl;
}

答案 2 :(得分:0)

使用replace算法,您可以简单地做到这一点。它会经过text字符串,并与相应的值替换特定字母的出现的所有encryption_key。这里encryption_key包含所有小写字母加密值。

void encryption(std::string text, std::string encryption_key){
    int j = 0;
    for(auto i = 'a'; i <= 'z'; i++) //text has only small letters
    {
        std::replace( text.begin(), text.end(), i, encryption_key.at(j)); 
        j++;
    }
    std::cout <<"Encrypted text: "<< text<<std::endl;   
}

请参见DEMO