Шифрование и дешифрование части таблицы 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;

Как это возможно, что заглавные буквы работают, а не строчные, если я допустил этот диапазон? Может ли это быть из-за чего-то еще? Я добавил эти снимки с тем, что происходит шаг за шагом … надеюсь, это поможет

0

Решение

В вашем коде:

    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] это «ты» или больше, str[i] имеет значение выше 255.

Вы должны использовать по модулю % оператор в данном случае это вращение, а не только смещение

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]