基本的加密和解密方法不起作用C ++ 11

时间:2018-08-16 07:07:57

标签: c++ arrays string c++11 encryption

我正在做两个基本的加密和解密功能,只是为了加密字符串,但是当输入某些字符时似乎不起作用...

这是我的代码:

#include <iostream>
#include <string>

using namespace std;

char characters[27][2] = {"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"," "};
char encrypted[27][2] = {"!","@","#","$","\%","^","&","*","(",")","_","-","+","=","~","`","{","}","[","]","|","\\",":",";","'","."};

bool replace(std::string& str, const std::string& from, const std::string& to) {
    size_t start_pos = str.find(from);
    if(start_pos == std::string::npos)
    return false;
    str.replace(start_pos, from.length(), to);
    return true;
}

string encrypt(string str) {
    int i = -1;
    for(string c : characters) {
        i += 1;
        replace(str,c,encrypted[i]);
    }
    return str;
}

string decrypt(string str) {
    int i = -1;
    for(string e : encrypted) {
        i += 1;
        replace(str,e,characters[i]);
    }
    return str;
}

int main() {
    string str = "testing-foo!";
    str = encrypt(str);
    cout << str;
    str = decrypt(str);
    cout << str;
}

我在编译时使用的是std c ++ 11,所以我可以初始化数组。
变量 str 的输出加密版本为]%[t(=&-^〜o !,而变量]%[t(=&-^〜o!)的输出解密版本。 strong>是 testinglfooa 。似乎用-替换了l和!。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

这是因为您没有加密中每个字符的映射。

您仅提供字母和空格字符,而在字符串testing-foo!中,您有字符-!。在调用encrypt函数期间,这些字符未加密。但是,解密时,这些字符分别解密为la

解决方案:尝试将您的列表也添加到迎合字符-!中。

答案 1 :(得分:0)

一次加密一个字符时,可能的加密字符集必须与可能的原始字符集相同,或者您必须确保任何消息都绝不会包含加密集中的字符。属于原始的。如果您不遵守该规则,则不能保证加密/解密操作是身份。

此处的邮件包含加密集中的字符,因此crypt / encrypt不是身份。


无关,但是您对charactersencrypted的存储和处理很奇怪。如果您设法使代码正常运行,那么您确实应该在Code Review上提交它以进行改进。