我正在做两个基本的加密和解密功能,只是为了加密字符串,但是当输入某些字符时似乎不起作用...
这是我的代码:
#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和!。
答案 0 :(得分:0)
这是因为您没有加密中每个字符的映射。
您仅提供字母和空格字符,而在字符串testing-foo!
中,您有字符-
和!
。在调用encrypt
函数期间,这些字符未加密。但是,解密时,这些字符分别解密为l
和a
。
解决方案:尝试将您的列表也添加到迎合字符-
和!
中。
答案 1 :(得分:0)
一次加密一个字符时,可能的加密字符集必须与可能的原始字符集相同,或者您必须确保任何消息都绝不会包含加密集中的字符。属于原始的。如果您不遵守该规则,则不能保证加密/解密操作是身份。
此处的邮件包含加密集中的字符,因此crypt / encrypt不是身份。
无关,但是您对characters
和encrypted
的存储和处理很奇怪。如果您设法使代码正常运行,那么您确实应该在Code Review上提交它以进行改进。