加密和解密ASCII表的一部分



我编写了一个小的加密程序,使用两个密钥rot7和rot13。一切正常,除了两个6个字母的uvwxyz。

如果我输入ABCDEFGHIJKLMNOPQRSTUVWXYZ,它加密和解密没有问题。但是,如果我以小写字母输入相同的内容,则uvwxyz不起作用。

说到这里,我已经允许ascii表中的所有可写字符作为有效范围,如下所示:

// allow all writable characters from 32 to 255
if ((str[i] >= 32 ) && (str[i] <=255))
{
    str[i] -= key;
}

加密过程如下:

    cout << endl;
    cout << "Encrypting process started " << endl << endl;
    cout << "--------------------------- " << endl;
    //get the string length
    int i = 0;
    int length = str.length();
    int key = rot13 ;
    int k = 5;
    int multiple = 0;
    int count = 0;
    cout << "the text to encrypt is: " << str << endl;
    cout << "text length is: " << length << endl; 
    cout << "using rot13"<<endl;
    cout <<"---------------------------" << endl;
    cout << "using rot13" << endl;
    //traverse the string
    for(i = 0; i < length; i++)
    {
        count ++;
       cout << left;
       //if it is a multiple of 5 not the first character change the key 
        if((multiple = (( i % 5 ) == 0)) && (count != 1)  && (key == rot13)){
            key = rot7;

        }
        //if it is a multiple of 5 not the first character change the key 
        else if((multiple = (( i % 5 ) == 0)) && (count != 1) && (key == rot7) ) {
            key = rot13;

        }

        // Capital letters are 65 to 90  (a - z)
        if ((str[i] >= 32) && (str[i] <= 255))
        {
            str[i] += key;
        }

    }
    return str;

如果我允许这个范围,大写字母怎么可能工作而不是小写字母?会不会是别的原因?我已经添加了这些捕获与什么发生一步一步…希望这对你有所帮助

在你的代码中:

    if ((str[i] >= 32) && (str[i] <= 255))
        {
           if (str[i] + key > 255)
               str[i] = ((str[i] + key) % 255 )+ 32;
           else
               str[i] += key;
        }

如果key的值为13且str[i]的值大于等于'u',则str[i]的值大于255。

在这种情况下,你应该使用模%算子,这是旋转,而不仅仅是移位

相关内容

  • 没有找到相关文章

最新更新