Sådan kodes Caesar-krypteringen: en introduktion til grundlæggende kryptering

Caesar-krypteringen er en berømt implementering af tidlig kryptering. Det ville tage en sætning og omorganisere den baseret på en nøgle, der er vedtaget i alfabetet. Tag for eksempel en nøgle på 3 og sætningen "Jeg kan godt lide at bære hatte."

Når denne sætning krypteres med en nøgle på 3, bliver den:

L olnh wr zhdu kdwv.

Dette gør det vanskeligt at læse og gør det muligt at sende meddelelser uopdaget.

Selvom dette er et meget simpelt eksempel på kryptering, er det et perfekt projekt for nogen, der lærer at kode for at øve sig på.

Forståelse af kryptering

For at implementere denne kode, i det mindste i JAVA, skal du tænke igennem, hvad der rent faktisk gøres. Så lad os se på de nødvendige skridt for at kode dette.

Trin 1: Identificer tegnet i sætningen.

Trin 2: Find karakterens placering inden for alfabetet.

Trin 3: Identificer placeringen af ​​tegn + nøglen i alfabetet.

Bemærk * hvis placeringen + tasten> 26, løkke rundt omkring og begynde at tælle på en.

Trin 4: Byg en ny sætning ved hjælp af de nye tegn i stedet for de originale tegn.

Trin 5: Gentag indtil sætningslængden er nået. (Til sløjfe).

Trin 6: Returner resultatet.

Kodning af kryptering

Selvom det er ret gode trin at følge med, skal vi tænke på, hvad vi skal gøre i kode.

Trin 0: Opret en funktion, der læser i en meddelelse og en nøgle.

Noget som dette:

public String Encrypt(String message, int key) {
}

Trin 1: Identificer tegnet i sætningen.

For at gøre dette bliver vi nødt til at oprette et alfabet at se på.

Opret et variabelt “alfabet”, der består af de 26 bogstaver i alfabetet.

String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";String alphabet2 = alphabet.toLowerCase();

Trin 2: Find karakterens placering inden for alfabetet.

Opret derefter en for-løkke, der løber gennem alle tegn i meddelelsen. Det bliver lettere at gøre dette, hvis vi opretter en StringBuilder.

StringBuilder encrypted = new StringBuilder(message);
for (int q = 0; q < encrypted.length(); q++) { char currchar = encrypted.charAt(q); int index = alphabet.indexOf(currchar);}

På dette tidspunkt skal vi sikre os, at stedet er et bogstav.

if (index != -1) {
} 

Trin 3: Identificer karakterens placering + nøglen i alfabetet.

Hvis det er et bogstav, er vi nødt til at finde stedet i det modificerede alfabet. Vi har endnu ikke oprettet en ændret alfabetvariabel, så det skal vi gøre nu.

Trin 4: Byg en ny sætning ved hjælp af de nye tegn i stedet for de originale tegn.

Når vi har fundet værdien i det modificerede alfabet, skal vi indstille den til den samme placering i StringBuilder, vi oprettede.

public String Encryption(String input, int key){ StringBuilder encrypted = new StringBuilder(input); String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; String alphabet2 = alphabet.toLowerCase(); String keyedalphabet = alphabet.substring(key) + alphabet.substring(0, key);for (int q = 0; q < encrypted.length(); q++) { char currChar = encrypted.charAt(q); int index = alphabet.indexOf(currChar); if (index != -1) { char newChar = keyedalphabet.charAt(index); encrypted.setCharAt(q, newChar); }

Trin 5: Gentag indtil sætningslængden er nået. (Til løkke)

Nu har vi kontrolleret, om tegnet er med store bogstaver, men vi skal også kontrollere, om tegnet er med små bogstaver. For at gøre dette skal vi få adgang til alphabet2, som vi oprettede tidligere.

index = alphabet2.indexOf(currChar); if (index != -1) { String keyedalphabet2 = keyedalphabet.toLowerCase(); char newChar = keyedalphabet2.charAt(index); encrypted.setCharAt(q, newChar); }

Trin 6: Returner resultatet.

Nu har vi afsluttet For-sløjfen. Alt, hvad vi har tilbage, er at forlade den og returnere strengen.

public String Encryption(String input, int key){ StringBuilder encrypted = new StringBuilder(input); String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; String alphabet2 = alphabet.toLowerCase(); String keyedalphabet = alphabet.substring(key) + alphabet.substring(0, key); for (int q = 0; q < encrypted.length(); q++) { char currChar = encrypted.charAt(q); int index = alphabet.indexOf(currChar); if (index != -1) { char newChar = keyedalphabet.charAt(index); encrypted.setCharAt(q, newChar); } index = alphabet2.indexOf(currChar); if (index != -1) { String keyedalphabet2 = keyedalphabet.toLowerCase(); char newChar = keyedalphabet2.charAt(index); encrypted.setCharAt(q, newChar); } } return encrypted }

Trin 7: Fejlfinding.

Men vent! Det fungerer ikke! krypteret er ikke en streng, det er en StringBuilder, og denne funktion kræver specifikt, at en streng skal returneres!

Heldigvis er der en meget enkel funktion til at afhjælpe dette tilsyn.

public String Encryption(String input, int key){ StringBuilder encrypted = new StringBuilder(input); String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; String alphabet2 = alphabet.toLowerCase(); String keyedalphabet = alphabet.substring(key) + alphabet.substring(0, key); for (int q = 0; q < encrypted.length(); q++) { char currChar = encrypted.charAt(q); int index = alphabet.indexOf(currChar); if (index != -1) { char newChar = keyedalphabet.charAt(index); encrypted.setCharAt(q, newChar); } index = alphabet2.indexOf(currChar); if (index != -1) { String keyedalphabet2 = keyedalphabet.toLowerCase(); char newChar = keyedalphabet2.charAt(index); encrypted.setCharAt(q, newChar); } } return encrypted.toString(); }

Sådan får du den krypterede version af din oprindelige sætning. Prøv det selv!

Tak fordi du læste!