我在做一个简单的C++聊天,我想加密用一个简单的做代码的消息。 所以我认为它会像chars a-x,然后它会替换它们,例如-11。 因此,这将需要分割字符串转换成字符,然后返回字符串
- 斯普利特消息为字符
- 更改字符数为
- 将它们放回正确的顺序。
那么有谁知道该怎么做? 谢谢:)
我在做一个简单的C++聊天,我想加密用一个简单的做代码的消息。 所以我认为它会像chars a-x,然后它会替换它们,例如-11。 因此,这将需要分割字符串转换成字符,然后返回字符串
那么有谁知道该怎么做? 谢谢:)
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;
在C++中的字符串已经是字符数组,除非你的聊天程序使用Unicode或其它字符集编码。在这种情况下,事情变得复杂得多,因为字符串可能是网络中新鲜的字节数组(不是字符),或者它可能是一组经过解码的宽字符(一个wstring)。
但假定您有一个8位字符的ASCII字符串或32位字符的解码宽字符串,步骤1和2非常容易。第一步是为你完成的。您应该可以使用数组索引访问每个字符,如mystring[1]
,mystring[2]
。步骤2很容易,因为字符是号码。只需要对角色值进行数学计算。你可以加,减,乘:无论你喜欢什么。请注意,8位字符的值可能在-128到+127之间。
字符的顺序串在不改变。所以把它们留在原地。
如果您的编码方法改变了字符串的长度,那么您将需要创建一个新的字符串副本。做这件事的最好方法就是在你做数学的时候。在C++中,使用push_back
方法将新字符添加到新字符串的“后面”。
一个简单的方法是运行一个循环并在每次迭代中处理字符。
#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;
}
搜索在互联网上执行ROT加密的实现,在你的情况下它将是ROT-11。 ROT代表“旋转”,因为'''' - 11'会给你一个字符超大的字母。相反,该值应该等于“z'-10”。 ROT-13最常见,因为加密与解密相同。 – 2012-03-28 19:35:52