Здравствуйте, ваултеране!
Сегодня мы узнаем больше об алгоритме One Time Pad, также известном как шифр Вернама. Но что это такое?
OTP – это метод шифрования алфавитного открытого текста. Это один из методов подстановки, который преобразует открытый текст в шифр-текст (расшифрованное слово). В этой идее мы присваиваем номер каждому символу открытого текста.
Присвоение происходит следующим образом:
В этом алгоритме длина ключевого слова должна быть равна длине обычного текста.
Примеры:
Входные данные: Сообщение = VAULTREE, Ключевое слово = AXDHCGQK.
Выход: Шифр – VXXSVXUO, Сообщение – VAULTREE
Объяснение:
Часть 1: Преобразование открытого текста в шифротекст
Открытый текст – V A U L T R E E → 21 0 20 11 19 17 4 4
Ключ – A X D H C G Q K → 0 23 3 7 2 6 16 10
Открытый текст + ключевое слово = 21 23 23 18 21 23 20 14
Шифрованный текст → V X X S V X U O
Часть 2: Преобразование шифротекста в сообщение
Текст шифра – V X X S V X U O → 21 23 23 18 21 23 20 14
Ключ – A X D H C G Q K → 0 23 3 7 2 6 16 10
Текст шифра – ключ = 21 0 20 11 19 17 4 4 → Сообщение → V A U L T R E E
В основном, шаги для шифрования следующие:
1- Присвоить номер каждому символу открытого текста и ключевому слову в соответствии с алфавитным порядком.
2- Сложить ( + ) оба числа (номер соответствующего символа открытого текста и номер символа ключевого слова).
3- Вычтите ( – ) число из 26, если прибавленное число больше 26, если нет, то оставьте его.
Помните, что для расшифровки применяется обратный процесс шифрования, то есть CT – KW = PT. (шифр-текст – ключевое слово = открытый текст).
Ниже приведена реализация алгоритма OTP:
`
public class OtpByVaultree {
// Method 1
// Returning encrypted text
public static String stringEncryption(String text,
String key)
{
// Initializing cipherText
String cipherText = "";
// Initialize cipher array of key length
// which stores the sum of corresponding no.'s
// of plainText and key.
int cipher[] = new int[key.length()];
for (int i = 0; i < key.length(); i++) {
cipher[i] = text.charAt(i) - 'A'
+ key.charAt(i)
- 'A';
}
// If the sum is greater than 25
// subtract 26 from it
// and store that resulting value
for (int i = 0; i < key.length(); i++) {
if (cipher[i] > 25) {
cipher[i] = cipher[i] - 26;
}
}
// Converting the no.'s into integers
// Convert these integers to corresponding
// characters and add them up to cipherText
for (int i = 0; i < key.length(); i++) {
int x = cipher[i] + 'A';
cipherText += (char)x;
}
// Returning the cipherText
return cipherText;
}
// Method 2
// Returning plain text
public static String stringDecryption(String s,
String key)
{
// Initializing plain text
String plainText = "";
// Initializing integer array of key length
// which stores difference
// of corresponding no.'s of
// each character of cipherText and key
int plain[] = new int[key.length()];
// Running for loop for each character
// subtracting and storing in the array
for (int i = 0; i < key.length(); i++) {
plain[i]
= s.charAt(i) - 'A'
- (key.charAt(i) - 'A');
}
// If the difference is less than 0
// add 26 and store it in the array.
for (int i = 0; i < key.length(); i++) {
if (plain[i] < 0) {
plain[i] = plain[i] + 26;
}
}
// Converting int to corresponding char
// add them up to plainText
for (int i = 0; i < key.length(); i++) {
int x = plain[i] + 'A';
plainText += (char)x;
}
// Returning plainText
return plainText;
}
// Method 3
// Main driver method
public static void main(String[] args)
{
// Declaring plain text
String plainText = "VAULTREE";
// Declaring key
String key = "AXDHCGQK";
// Converting plain text to toUpperCase
// function call to stringEncryption
// with plainText and key as parameters
String encryptedText = stringEncryption(
plainText.toUpperCase(), key.toUpperCase());
// Printing cipher Text
System.out.println("Cipher Text - "
+ encryptedText);
// Calling above method to stringDecryption
// with encryptedText and key as parameters
System.out.println(
"Message - "
+ stringDecryption(encryptedText,
key.toUpperCase()));
}}
`
С помощью этого алгоритма вы сможете расшифровывать сообщения, используя метод OTP. Получайте удовольствие!
–
В Vaultree мы строим зашифрованное будущее. Мы любим делиться ценной информацией и тенденциями, чтобы помочь вам сохранить ваши данные в безопасности. Подпишитесь, чтобы оставаться в курсе событий и обсуждать самые горячие тенденции в области кибербезопасности с командой экспертов.