我正在尝试制作一个非常简单的Caesar密码算法来加密和解密我的游戏中的玩家数据,但我得到了一些奇怪的结果。算法的任务很简单,只需推动或向后推动角色。 ascii table。
std::string Encrypt(std::string in,int key)
{
const char* chars=in.data();
char* newchar=(char*)malloc(sizeof(char)*in.length());
for(int c=0;c<in.length();c++)
{
newchar[c]=char(((int)chars[c])+key);//I suspect somewhere here is the problem
}
std::string out(newchar);
return out;
}
LOGI("encrypt:%s",Encrypt("hello",10).data());
LOGI("decrypt:%s",Encrypt(Encrypt("hello",10),-10).data());
输出:
encrypt:rovvyu@
decrypt:hellok
我对加密知之甚少,而且我对ascii和整个角色的工作原理知之甚少
答案 0 :(得分:4)
std::string Encrypt(const std::string & in, int key)
{
std::string out(in);
for(int i=0; i < in.length(); ++i)
{
out[i] += key;
}
return out;
}
答案 1 :(得分:0)
问题是添加&#34; key&#34; a..z中的值可能无法回到该范围内。像
这样的东西if (chars[c] >= 'a' && chars[c] <='z') newchar[c] = 'a' + ((chars[c]-'a'+key)%26);
else if (chars[c] >= 'A' && chars[c] <='Z') newchar[c] = 'A' + ((chars[c]-'A'+key)%26);
else newchar[c] = chars[c];
希望你有充分的理由使用这么弱的东西。 BTW,使用26键反转。
答案 2 :(得分:-1)
如果你想知道如何制作凯撒密码,那就太酷了。如果您确实想要保护某些数据,请不要这样做!它不再是一种加密方法,而不是猪拉丁语。
相反,请使用预先编写的加密库。不要自己编写,因为它需要很长时间才能正确完成。对于大多数情况,AES速度非常快,并且具有适用于几乎所有编程语言的库。