При шифре Гронсвельда шифр уходит за рамки алфавита
При шифре Гронсвельда, например, при шифровке слове Sony и при ключе 23, шифр идёт правильно, но уходит за рамки алфавита
void encryt()
{
string encryptedText;
for (int j = 0; Key.size() < Word.size(); j++)
{
Key.push_back(Key[j]);
}
for (int i = 0; i < Word.size(); i++)
{
if (Word[i] == ' ')
{
encryptedText.push_back(' ');
}
else
{
encryptedText.push_back(char((Word[i]) + Key[i] - 48));
}
}
cout << "\nText: " << "\t" << Word << endl;
cout << "Key: " << "\t" << Key << endl;
cout << "\nEncrypted Text: " << encryptedText << endl;
this->encryptedText = encryptedText;
}
Вывод консоли
Text: Sony
Key: 2323
Encrypted Text: Urp|
Decrypted Text: Sony
Ответы (1 шт):
Автор решения: DmitryK
→ Ссылка
Для прописных букв английского алфавита циклический сдвиг будет так
NewSymbol = Word[i] + Key[i] - 48;
if(NewSymbol > 90)
NewSymbol -= 26;
Ну и для избежания возможных ошибок, все символы отличные от букв нужно копировать в новую строку без изменения, а не только пробелы.
if (Word[i] < 65 || Word[i] > 90) // то же самое - if (Word[i] < 'A' || Word[i] > 'Z')
{
encryptedText.push_back(Word[i]);
}