我正在进行简单的c ++聊天,我想用简单的代码加密消息。 所以我认为它会像chars a-x然后它会替换它们例如a -11。 所以它需要
所以有人知道怎么做吗? 谢谢:))
答案 0 :(得分:2)
一种简单的方法是运行循环并在每次迭代时处理字符。
#include <iostream>
#include <string.h>
using namespace std;
int main() {
int num = 3; //your choice for encryption
int len = 30; //length of string
char * str = new char[len];
cin>>str;
//encrypt
for (int i = 0; i < strlen(str);i++)
{
str[i] += num;
}
cout<<str<<endl;
return 0;
}
答案 1 :(得分:1)
std::string
会存储char
的任意值,让您可以轻松访问各个字符。但是,对于加密,您可能更愿意使用unsigned char
,这也非常简单 - std::string
只是std::basic_string<char>
的typedef,但std::basic_string<unsigned char>
非常容易管理。
听起来你想要的是Ceaser密码的顺序,尽管如果你只是“加密”所有东西,而不仅仅是字母,这是最简单的。
std::basic_string<unsigned char> s;
for (int i=0; i<s.length(); i++)
s[i] += 5;
然后“解密”你只是反其道而行:
for (int i=0; i<s.length; i++)
s[i] -= 5;
答案 2 :(得分:0)
C ++中的字符串已经是一个字符数组,除非您的聊天程序使用Unicode或其他字符集编码。在这种情况下,事情变得更加复杂,因为字符串可能是网络上新鲜的字节数组(不是字符),也可能是解码后的宽字符数组(wstring)。
但假设您有8位字符的ASCII字符串或32位字符的解码宽字符串,步骤1和2非常简单。第1步是为您完成的。您应该能够使用数组索引访问每个字符,例如mystring[1]
,mystring[2]
。第2步很简单,因为字符是数字。只需对字符值进行数学运算即可。您可以添加,减去或乘以:您喜欢的任何内容。请注意,8位字符的值可能介于-128到+127之间。
字符串的顺序在字符串中不会改变。所以只需将它们留在原地。
如果您的编码方法更改了字符串的长度,那么您将需要创建该字符串的新副本。最好的方法是在你做数学的时候。在C ++中,使用push_back
方法将新字符添加到新字符串的“后面”。