Paso 9: El código: cifrado
pos_rotor3 += 1;
if(pos_rotor3 > 25)
{
pos_rotor3 = 0;
}
if(pos_rotor3 == spin_r3)
{
pos_rotor2 += 1;
if(pos_rotor2 > 25)
{
pos_rotor2 = 0;
}
if(pos_rotor2 == spin_r2)
{
pos_rotor1 += 1;
if(pos_rotor1 > 25)
{
pos_rotor1 = 0;
}
}
}
Esta función es básicamente donde sucede toda la magia. Un valor de entrada además de los valores del rotor y el desplazamiento del rotor actualmente. Salidas de la carta que saldría de eso un rotor.
Esto realmente no es mucho más que un simple personaje subsitution. Una verdadera máquina del Enigma lo hizo con los alambres dentro de un rotor. Hacemos esto varias veces, uno para cada rotor va hacia adelante, entonces lo enviamos a través del reflector, luego a través de los rotores.
int get_rotor_output (int index, char rot [], char rotIndex [], int pos_rot)
{
lo primero que debemos hacer es agregar la posición del rotor para el índice de figura
Qué carta nos sentimos realmente en
Índice += pos_rot;
Si el índice es de más de 25 entonces hemos envuelto alrededor del final de la matriz
por lo tanto restamos 26 de él para conseguir el carácter real
if(index > 25)
{
Índice-= 26;
}
ahora nosotros averiguar el índice de la letra en el alfabeto
es decir, A = 0, B = 1, C = 2, etc..
luego coge la letra en la misma posición en la matriz de rotor
se trata de cómo hacer la sustitución de caracteres
char tmp_letter = putrefacción [find_index (rotIndex, alpha[index])];
Ahora tenemos el índice de la carta que fue salida en el alfabeto
misma idea que por encima de A = 0, B = 1., etc.
Índice = find_index (alfa, tmp_letter);
Ahora restamos la posición del rotor del índice que es salida
Índice = pos_rot;
Si el índice es menor que 0, entonces hemos envuelto de principio
de la matriz, así que vamos a añadir 26 a él para volver a la matriz
if(index < 0)
{
Índice += 26;
}
Ahora vamos a volver el índice de
volver índice;
}
Nota: La imagen en este paso es de Wikipedia