Мне нужно закодировать алгоритм загадки, используемый нацистской Германией для шифрования сообщений, отправляемых по радио, вы можете прочитать, как он работает правильно здесь
На данный момент я только кодирую роторы, я еще не кодировал Plugboard или начальную позицию ротора, поскольку у меня, похоже, уже есть проблемы с этим.
Вот что я написал:
for (int i=0; i<strlen(sentence);i++){
sentence[i]=toupper(sentence[i]);
temp=rs1[0];
for(int s=0;s<26-1;s++)
{
rs1[s]=rs1[s+1];
}
rs1[26-1]=temp;
j++;
if (j==26){
j=0;
temp=rs2[0];
for(int s=0;s<26-1;s++)
{
rs2[s]=rs2[s+1];
}
rs2[26-1]=temp;
z++;
}
if (z==26){
z=0;
temp=rs2[0];
for(int s=0;s<26-1;s++)
{
rs2[s]=rs2[s+1];
}
rs2[26-1]=temp;
}
q=(sentence[i]-65);
//this cant decrypt
sentence[i]=encrypt(sentence[i],rs1);
//printf("%s\n",sentence);
sentence[i]=encrypt(sentence[i],rs2);
//printf("%s\n",sentence);
sentence[i]=encrypt(sentence[i],rs3);
//printf("%s\n",sentence);
sentence[i]=reflect(sentence[i]);
//printf("%s\n",sentence);
sentence[i]=encrypt(sentence[i],rs3);
//printf("%s\n",sentence);
sentence[i]=encrypt(sentence[i],rs2);
//printf("%s\n",sentence);
sentence[i]=encrypt(sentence[i],rs1);
//printf("%s\n",sentence);
}
функции:
char encrypt(char c, char r[]){
int num=(int)c-65;
char newc;
newc=r[num];
return newc;
}
char relfect(char c){
char reflector[27]={'A','Q','W','S','E','D','R','F','T','G','Y','H','U','J','O','K','I','L','P','Z','V','C','X','B','N','M'};
int num=(int)c-65;
char newc;
newc=reflector[num];
return newc;
}
Когда я компилирую и выполняю свой код, мне удается зашифровать введенное мной слово, но когда я перезагружаю программу и вставляю зашифрованное слово, она не дешифруется, что кажется странным.
Пример:
Если я ввожу Hello, я получаю QOBAJ, но при перезапуске программы и вводе QOBAJ я получаю MWCJC вместо Hello, и я не могу понять, почему.
Используемые мной роторы:
1- EKMFLGDQVZNTOWYHXUSPAIBRCJ
2- AJDKSIRUXBLHWTMCQGZNPYFVOE
3- BDFHJLCPRTXVZNYEIWGAKMUSQO
Спасибо за помощь.
Lorenzo.