Stap 9: De Code: codering
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;
}
}
}
Deze functie is in principe waar alle magie gebeurt. Een waarde wordt ingevoerd naast de waarden van de rotor en de verschuiving van de rotor is momenteel op. Het uitgangen de letter die uit dat ene rotor voortkomen zou.
Dit is echt niet veel meer dan een eenvoudige teken subsitution. Een echte Enigma machine deed dit met draden binnen een rotor. Wij doen dit meerdere keren, één voor elke rotor gaan vooruit, dan we het door middel van de reflector, dan terug via de rotors sturen.
int get_rotor_output (int index char rot [], char rotIndex [], int pos_rot)
{
eerste wat die we moeten doen is de rotor positie toe te voegen aan de index om erachter te
welke brief zijn we echt op
index += pos_rot;
Als de index meer dan 25 is heb dan we gewikkeld rond het einde van de array
dus we zullen aftrekken 26 uit om naar het echte teken
if(index > 25)
{
index-= 26;
}
nu uitzoeken we van de index van de letter in het alfabet
dat wil zeggen A = 0, B = 1, C = 2, etc.
dan grijpen we de letter in dezelfde positie in de matrix van de rotor
Dit is hoe wij de tekens vervangen
char tmp_letter = rot [find_index (rotIndex, alpha[index])];
nu krijgen we de index van de brief die output in het alfabet was
hetzelfde idee als boven A = 0, B = 1., enz
index = find_index (alpha, tmp_letter);
Nu aftrekken we de positie van de rotor van de index die uitvoer was
index-= pos_rot;
Als de index kleiner dan 0 is, hebben dan we verpakt uit het begin
van de matrix, dus voegen we 26 ernaar terug te krijgen in de matrix
if(index < 0)
{
index += 26;
}
nu laten we retourneer de index
Retourneer index;
}
Opmerking: De afbeelding in deze stap is uit Wikipedia