Barnens spel till Arduino Enigma maskin (9 / 10 steg)
Steg 9: Koden: kryptering
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;
}
}
}
Funktionen är i princip där alla magiska händer. Ett värde är ingång utöver rotor värdena och förskjutningen rotorn är för närvarande på. Det utgångar den skrivelse som skulle komma ut ur det en rotorn.
Detta är verkligen inte mycket mer än en enkel karaktär byts. En riktig Enigma-maskin gjorde detta med sladdar inuti en rotor. Vi gör detta flera gånger, en för varje rotor framöver, då vi skickar det genom reflektorn, sedan tillbaka genom rotorerna.
int get_rotor_output (int index, char rot [], char rotIndex [], int pos_rot)
{
första vi behöver göra är att lägga rotorn position i index att räkna
ut vilka brev är vi verkligen på
index += pos_rot;
Om indexet ligger mer än 25 har sedan vi lindade runt slutet av matrisen
så vi ska subtrahera 26 från det att komma till den verkliga karaktären
IF(index > 25)
{
index-= 26.
}
nu lista vi ut index för bokstaven i alfabetet
dvs. A = 0, B = 1, C = 2, etc.
sedan ta vi märka i samma position i matrisen rotor
Detta är hur vi gör karaktär substitution
char tmp_letter = rot [find_index (rotIndex, alpha[index])];
nu får vi index för det brev som var utgång i alfabetet
samma idé som ovan A = 0, B = 1. etc
index = find_index (alfa, tmp_letter);
Nu subtrahera vi den rotor ståndpunkten från det index som var produktionen
index-= pos_rot;
om index är mindre än 0, då vi har inslagna bort början
i matrisen, så vi lägger 26 till den för att få tillbaka i matrisen
IF(index < 0)
{
index += 26.
}
Nu låt oss återvända index
Return index.
}
Obs: Bilden i det här steget är från Wikipedia