Это мое упражнение для занятий, которое мы должны выполнить с помощью «hdvb wr euhdn» и найти ключ, который работает, но мой код разбивает его (я думаю, правильно), но два разных ключа дают одинаковый результат. Является ли это нормальным, или я делаю это неправильно?Caesar Cipher bruteforce
Ключи 2 и 11 работают, а некоторые другие, которые не работают, повторяют одни и те же символы. Мы просто написали основные шифры цезарного сдвига, и я подумал, что этот подход был лучшей грубой силой.
#include<iostream>
#include<String>
using std::string;
using std::endl;
void bruteForce(string x);
void bruteForce(string x)
{
int key = 0;
int length = (int)x.length();
for (int i = 0; i < 25; i++)
{
key++;
std::cout << "The key is " << key << endl;
std::cout << endl;
for (int j = 0; j < length; j++)
{
if (x[j] == ' ')
{
x[j] = ' ';
std::cout << x[j];
j++;
}
x[j] = tolower(x[j]);
x[j] -= 97;
x[j] -= key;
if (x[j] < 0)
{
x[j] += 26;
}
x[j] += 97;
std::cout << x[j];
}
std:: cout << endl;
}
}
Похоже, вы изменяете строку на месте, что означало бы каждый цикл становится другой вход. –