Как да кодирам Caesar Cipher: въведение в основното криптиране

Цезаровият шифър е известна реализация на ранното криптиране. Това ще отнеме изречение и ще го реорганизира въз основа на ключ, който се прилага върху азбуката. Вземете например ключ от 3 и изречението „Обичам да нося шапки“.

Когато това изречение е кодирано с ключ от 3, то става:

L olnh wr zhdu kdwv.

Това затруднява четенето и позволява съобщенията да се предават неоткрити.

Въпреки че това е много прост пример за криптиране, това е идеален проект за някой, който се учи да практикува код.

Разбиране на шифъра

За да приложите този код, поне в JAVA, ще трябва да помислите какво всъщност се прави. Така че, нека разгледаме стъпките, необходими за кодиране на това.

Стъпка 1: Идентифицирайте героя в изречението.

Стъпка 2: Намерете местоположението на този символ в азбуката.

Стъпка 3: Определете местоположението на знаците + ключа в азбуката.

Забележка * ако местоположението + клавиш> 26, върнете се обратно и започнете да броите до един.

Стъпка 4: Създайте ново изречение, като използвате новите символи вместо оригиналните символи.

Стъпка 5: повторете, докато не се достигне дължината на изречението. (За цикъл).

Стъпка 6: върнете резултата.

Кодиране на шифъра

Макар че това са доста добри стъпки, които трябва да следваме, трябва да помислим какво трябва да направим в кода.

Стъпка 0: Установете функция, която чете съобщение и ключ.

Нещо като това:

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

Стъпка 1: Идентифицирайте героя в изречението.

За да направим това, ще трябва да установим азбука, която да разглеждаме.

Установете променлива „азбука“, която се състои от 26-те букви на азбуката.

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

Стъпка 2: Намерете местоположението на този символ в азбуката.

След това създайте цикъл for, който преминава през всеки символ в съобщението. Ще бъде по-лесно да направим това, ако създадем StringBuilder.

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

В този момент трябва да се уверим, че мястото е буква.

if (index != -1) {
} 

Стъпка 3: Определете местоположението на този знак + ключа в азбуката.

Ако това е буква, тогава трябва да намерим мястото в модифицираната азбука. Все още не сме установили модифицирана азбучна променлива, така че трябва да направим това сега.

Стъпка 4: Създайте ново изречение, като използвате новите символи вместо оригиналните символи.

След като намерим стойността в модифицираната азбука, трябва да я зададем на същото място в StringBuilder, който създадохме.

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); }

Стъпка 5: повторете, докато не се достигне дължината на изречението. (За цикъл)

Сега проверихме дали символът е с главни букви, но също така трябва да проверим дали символът е с малки букви. За да направим това, трябва да осъществим достъп до alphabet2, който установихме по-рано.

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

Стъпка 6: върнете резултата.

Сега завършихме цикъла For. Всичко, което ни остава, е да излезем от него и да върнем низа.

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 }

Стъпка 7: Отстраняване на грешки.

Но почакай! Това няма да работи! encrypted не е String, това е StringBuilder и тази функция специално изисква String да бъде върнат!

За щастие има много проста функция за отстраняване на този пропуск.

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(); }

По този начин получавате криптирана версия на оригиналното си изречение. Опитайте сами!

Благодаря ви, че прочетохте!