C ++简单凯撒密码算法(c++ simple Caesar cipher algorithm)

2019-09-23 15:07发布

我试图做一个非常简单的凯撒密码算法来加密,并在我的解密游戏玩家的数据,但我得到了算法的一些奇怪的results.The任务很简单,只需按盼着或向后字符的ASCII表。

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和整体特征的东西如何在C工作

Answer 1:

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;
}


Answer 2:

问题是,在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];

希望你有一个很好的理由使用的东西这么弱。 顺便说一句,使用26键反转。



Answer 3:

如果你只想知道如何让恺撒密码,爽。 如果你真的想保护一些数据,不这样做! 这是不超过隐语的加密方法。

相反,使用预先写好的加密库。 因为它需要很长的时间来得到它的权利不要写你自己的。 AES是快速,对于大多数情况不够好,并具有几乎所有的编程语言库。



文章来源: c++ simple Caesar cipher algorithm