Здравствуйте!
Есть код на C++ (реализация идеи симметричного шифрования Гилберта Вернама), компилируется без ошибок, в принципе - даже работает, если бы не одно но:
Корректная работа программы возможна только при следующих условиях:
- в сообщении допустимо использовать только заглавные латинские буквы (без пробелов);
- в ключе допустимо использовать только цифры и заглавные латинские буквы;
При соблюдении этих условий, код работает корректно.
Но хотелось бы всё-таки научить его кириллице, знакам пунктуации, регистру.
Возможно ли без изменения всей логики в целом? Если да, то как?
Программа алгоритма шифрования:
#include<bits/stdc++.h>
using namespace std;
int main(){
    int t,n,i,j,k,sum=0;
    string m;
    cout<<"Enter the message"<<'\n';
    cin>>m;
    string key;
    cout<<"Enter the key"<<'\n';
    cin>>key;
    int mod = key.size();
    j=0;
    for(i=key.size();i<m.size();i++){
        key+=key[j%mod];
        j++;
    }
    string ans="";
    for(i=0;i<m.size();i++){
        ans += (key[i]-'A'+m[i]-'A')%26+'A';
    }
    cout<<"Encrypted message: "<<ans<<'\n';
    
    return 0;
}
Пример работы:
$ ./en
Enter the message
LINUX    
Enter the key
LORORGRU
Encrypted message: WWEIO
Программа алгоритма дешифрования:
#include<bits/stdc++.h>
using namespace std;
int main(){
    int t,n,i,j,k,sum=0;
    string m;
    cout<<"Enter the message"<<'\n';
    cin>>m;
    string key;
    cout<<"Enter the key"<<'\n';
    cin>>key;
    int mod = key.size();
    j=0;
    for(i=key.size();i<m.size();i++){
        key+=key[j%mod];
        j++;
    }
    string ans="";
    for(i=0;i<m.size();i++){
        ans += (m[i]-key[i]+26)%26+'A';
    }
    cout<<"Decrypted message: "<<ans<<'\n';
    
    return 0;
}
Пример:
$ ./de
Enter the message
WWEIO
Enter the key
LORORGRU
Decrypted message: LINUX
Источник: https://japp.io/cryptography/vernam-cipher-algorithm-program-in-c-c/
Компиляцию выполнял следующим образом (debian 11):
$ g++ en.cpp -o en
$ g++ de.cpp -o de
Запуск в терминале:
$ ./en
$ ./de
Также интересует мнение относительно криптостойкости данной реализации.









