string S, K, generated;
cout << "Enter the message: ";
cin >> S;
cout << "Enter the key: ";
cin >> K;
cout << "The message is: " << S << endl; // output the string
int seed = 0;
for(int i = 0; i < (int) K.length(); i++)
seed += K[i]; // used to generate a certain sequence of numbers
srand(seed); // new seed per new key
cout << "The cipher is: ";
for(int i = 0; i < (int) S.length(); i++) {
int R = rand() % K.length();
char L = 65 + (S[i] - 65 + K[R] - 65) % 26;
cout << L;
generated += L; // to actually have something to use for decryption
}
// FINALLY, to reach to this step and do something like this took me over 2 hours of continuous debugging
cout << endl;
cout << "The message again is: ";
for(int i = 0; i < (int) generated.length(); i++) {
int R = rand() % K.length();
char L = 65 + (generated[i] - 65 + K[R] - 65) % 26;
cout << L;
}
cout << endl;
Извините за беспорядочный код. Во всяком случае, так вот что я сделал до сих пор:Расшифровать зашифрованный текст до открытого текста с известным ключом
- Пользователь вводит сообщение и ключ
- Пользователь получает шифротекста
Но теперь я на самом деле застрял с тем, что я хочу, чтобы расшифровать зашифрованный текст, используя правильный ключ. В принципе, я хочу вернуть зашифрованный текст в открытый текст. Я прилагаю все усилия, чтобы сделать это сам, и этот подход указан в разделе «Сообщение снова:», но это дает мне неправильный результат.
Что я здесь делаю неправильно?
Я должен сказать, что на фазе дешифрования я больше не использовал произвольно сгенерированные числа из-за того, что я сохранил их в массиве, чтобы избежать путаницы с srand(). Метод обратного сдвига работал отлично. – Hakam
Вы также можете сделать это без случайных чисел, а затем ваш код будет очень похож на «Vigenere». –