Come consigliatomi da un moderatore apro una nuova discussione riguardante la macchina enigma !
Di recente ho iniziato il progetto scrivendoli in C e ritengo di essere a buon punto ma ho alcuni dubbi, uno di questi riguarda la funzione di riflessione di uno dei rotori che non mi è molto chiara e quindi chiedo se qualcuno può rispiegarmela gentilmente !
Posto anche un pezzo di codice dove genero i rotori che spero sia coretto:
Qui invece è la funzione che cripta il messaggio ( senza il rotore riflesso ):
Attendo risposte da chi più esperto
Di recente ho iniziato il progetto scrivendoli in C e ritengo di essere a buon punto ma ho alcuni dubbi, uno di questi riguarda la funzione di riflessione di uno dei rotori che non mi è molto chiara e quindi chiedo se qualcuno può rispiegarmela gentilmente !
Posto anche un pezzo di codice dove genero i rotori che spero sia coretto:
Codice:
printf("Inserire la chiave del giorno per i rotori : ");
scanf("%s", &key);
printf("\n%s\n\n", key);
int aus = (int)key[cr];
aus = aus - 97;
cr++; // convertire in ascii
/* variabili ausiliarie */
printf("%d\n", aus);
for(cont = 0;cont < 26;cont++)
{
if(aus > 26)
{
aus = 0;
}
aus = aus + 1;
ac1++;
rotore1[ac1] = aus; /* creare funzione per salvare il rototre */
}
int aus2 = (int) key[cr];
aus2 = aus2 - 97;
cr++;
/* variabili ausiliarie */
printf("%d\n", aus2);
for (cont = 0;cont < 26;cont++)
{
if (aus2 > 26)
{
aus2 = 0;
}
aus2 = aus2 + 1;
ac2++;
rotore2[ac2] = aus2;
}
int aus3 = (int) key[cr];
aus3 = aus3 - 97;
/* variabili ausiliarie */
printf("%d\n", aus3);
for (cont = 0;cont < 26;cont++)
{
if (aus3 > 26)
{
aus3 = 0;
}
aus3 = aus3 + 1;
ac3++;
rotore3[ac3] = aus3;
}
Qui invece è la funzione che cripta il messaggio ( senza il rotore riflesso ):
Codice:
printf("Inserire il primo scambio:\n"); //ingresso scambi
scanf("%s%s", &scambio1[1], &scambio11[1]);
printf("\ndebug %c%c\n", scambio1[1], scambio11[1]);
printf("Inserire il secondo scambio:\n");
scanf("%s%s", &scambio2[1], &scambio21[1]);
printf("\ndebug %c%c\n", scambio2[1], scambio21[1]);
printf("Inserire la frase da criptare:");
scanf("%s", &a);
// implementare funzione di scambio dei caratteri
/* funzione di scambio1 */
for(lungA=0;lungA<strlen(a);lungA++)
{
if (a[lungA] == scambio1[1])a[lungA] = scambio11[1];
}
/* funzione di scambio2 */
for(lungA=0;lungA<strlen(a);lungA++)
{
if (a[lungA] == scambio2[1])a[lungA] = scambio21[1];
}
printf("\ndebug: %s\n", a);
/* funzione di criptazione */
for (lungA = 0, i = 0, z = 0, y = 0; lungA < strlen(a); lungA++)
{
copyrot = rotore1[i]; i++;
a[lungA] = copyrot + 97;
if (i == 26)copyrot = rotore2[z]; z++; a[lungA] = copyrot + 97; i = 0;
if (z == 26)copyrot = rotore3[y]; y++; a[lungA] = copyrot + 97; z = 0;
if (y == 26)y = 0;
printf("%c", a[lungA]);
}
Attendo risposte da chi più esperto