Цезарь Шифр в криптографии
Метод Caesar Cipher - один из самых ранних и простых методов шифрования. Это просто тип шифра подстановки, то есть каждая буква данного текста заменяется буквой на фиксированное количество позиций в алфавите. Например, при сдвиге 1 A будет заменено на B, B станет C и так далее. Метод, по-видимому, назван в честь Юлия Цезаря, который, по-видимому, использовал его для общения со своими официальными лицами.
Таким образом, чтобы зашифровать данный текст, нам нужно целочисленное значение, известное как сдвиг, которое указывает номер позиции, на которую каждая буква текста была перемещена вниз.
Шифрование может быть представлено с использованием модульной арифметики путем предварительного преобразования букв в числа в соответствии со схемой A = 0, B = 1,…, Z = 25. Шифрование буквы с помощью сдвига n можно математически описать как.
(Фаза шифрования со сдвигом n)
(Фаза дешифрования со сдвигом n)
Примеры :
Text : ABCDEFGHIJKLMNOPQRSTUVWXYZ Shift: 23 Cipher: XYZABCDEFGHIJKLMNOPQRSTUVW Text : ATTACKATONCE Shift: 4 Cipher: EXXEGOEXSRGI
Алгоритм для шифра Цезаря:
Вход:
- Строка строчных букв, называемая текстом.
- Целое число от 0 до 25, обозначающее требуемый сдвиг.
Процедура:
- Перемещайте данный текст по одному символу за раз.
- Для каждого символа преобразуйте данный символ в соответствии с правилом, в зависимости от того, шифруем мы или дешифруем текст.
- Вернуть новую сгенерированную строку.
Программа, которая получает текст (строку) и значение Shift (целое число) и возвращает зашифрованный текст.
C ++
// A C++ program to illustrate Caesar Cipher Technique #include <iostream> using namespace std; // This function receives text and shift and // returns the encrypted text string encrypt(string text, int s) { string result = "" ; // traverse text for ( int i=0;i<text.length();i++) { // apply transformation to each character // Encrypt Uppercase letters if ( isupper (text[i])) result += char ( int (text[i]+s-65)%26 +65); // Encrypt Lowercase letters else result += char ( int (text[i]+s-97)%26 +97); } // Return the resulting string return result; } // Driver program to test the above function int main() { string text= "ATTACKATONCE" ; int s = 4; cout << "Text : " << text; cout << "
Shift: " << s; cout << "
Cipher: " << encrypt(text, s); return 0; } |
Джава
//A Java Program to illustrate Caesar Cipher Technique class CaesarCipher { // Encrypts text using a shift od s public static StringBuffer encrypt(String text, int s) { StringBuffer result= new StringBuffer(); for ( int i= 0 ; i<text.length(); i++) { if (Character.isUpperCase(text.charAt(i))) { char ch = ( char )((( int )text.charAt(i) + s - 65 ) % 26 + 65 ); result.append(ch); } else { char ch = ( char )((( int )text.charAt(i) + s - 97 ) % 26 + 97 ); result.append(ch); } } return result; } // Driver code public static void main(String[] args) { String text = "ATTACKATONCE" ; int s = 4 ; System.out.println( "Text : " + text); System.out.println( "Shift : " + s); System.out.println( "Cipher: " + encrypt(text, s)); } } |
Python
#A python program to illustrate Caesar Cipher Technique def encrypt(text,s): result = "" # traverse text for i in range ( len (text)): char = text[i] # Encrypt uppercase characters if (char.isupper()): result + = chr (( ord (char) + s - 65 ) % 26 + 65 ) # Encrypt lowercase characters else : result + = chr (( ord (char) + s - 97 ) % 26 + 97 ) return result #check the above function text = "ATTACKATONCE" s = 4 print "Text : " + text print "Shift : " + str (s) print "Cipher: " + encrypt(text,s) |
C #
// AC# Program to illustrate Caesar Cipher Technique using System; using System.Text; public class CaesarCipher { // Encrypts text using a shift od s public static StringBuilder encrypt(String text, int s) { StringBuilder result= new StringBuilder(); for ( int i=0; i<text.Length; i++) { if ( char .IsUpper(text[i])) { char ch = ( char )((( int )text[i] + s - 65) % 26 + 65); result.Append(ch); } else { char ch = ( char )((( int )text[i] + s - 97) % 26 + 97); result.Append(ch); } } return result; } // Driver code public static void Main(String[] args) { String text = "ATTACKATONCE" ; int s = 4; Console.WriteLine( "Text : " + text); Console.WriteLine( "Shift : " + s); Console.WriteLine( "Cipher: " + encrypt(text, s)); } } /* This code contributed by PrinciRaj1992 */ |
PHP
<?php // A PHP program to illustrate Caesar // Cipher Technique // This function receives text and shift // and returns the encrypted text function encrypt( $text , $s ) { $result = "" ; // traverse text for ( $i = 0; $i < strlen ( $text ); $i ++) { // apply transformation to each // character Encrypt Uppercase letters if (ctype_upper( $text [ $i ])) $result = $result . chr ((ord( $text [ $i ]) + $s - 65) % 26 + 65); // Encrypt Lowercase letters else $result = $result . chr ((ord( $text [ $i ]) + $s - 97) % 26 + 97); } // Return the resulting string return $result ; } // Driver Code $text = "ATTACKATONCE" ; $s = 4; echo "Text : " . $text ; echo "
Shift: " . $s ; echo "
Cipher: " . encrypt( $text , $s ); // This code is contributed by ita_c ?> |
Javascript
<script> //A Javascript Program to illustrate Caesar Cipher Technique // Encrypts text using a shift od s function encrypt(text, s) { let result= "" for (let i = 0; i < text.length; i++) { let char = text[i]; if (char.toUpperCase(text[i])) { let ch = String.fromCharCode((char.charCodeAt(0) + s-65) % 26 + 65); result += ch; } else { let ch = String.fromCharCode((char.charCodeAt(0) + s-97) % 26 + 97); result += ch; } } return result; } // Driver code let text = "ATTACKATONCE" ; let s = 4; document.write( "Text : " + text + "<br>" ); document.write( "Shift : " + s + "<br>" ); document.write( "Cipher: " + encrypt(text, s) + "<br>" ); // This code is contributed by avanitrachhadiya2155 </script> |
Выход:
Текст: АТАКА Сдвиг: 4 Шифр: EXXEGOEXSRGI
Как расшифровать?
Мы можем либо написать другую функцию дешифрования, аналогичную encrypt, которая применит данный сдвиг в противоположном направлении для дешифрования исходного текста. Однако мы можем использовать циклическое свойство шифра по модулю, поэтому мы можем просто наблюдать
Cipher (n) = Расшифровать (26-n)
Следовательно, мы можем использовать ту же функцию для дешифрования, вместо этого мы изменим значение сдвига так, чтобы сдвиг = 26-сдвиг (см. Это для примера прогона на C ++).
https://www.youtube.com/watch?v=S472gPqwF
-O
Эта статья предоставлена Ашутошем Кумаром. Если вам нравится GeeksforGeeks, и вы хотели бы внести свой вклад, вы также можете написать статью и отправить ее по электронной почте на deposit@geeksforgeeks.org. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше