Цезарь Шифр в криптографии

Опубликовано: 20 Декабря, 2021

Метод 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

Алгоритм для шифра Цезаря:
Вход:

  1. Строка строчных букв, называемая текстом.
  2. Целое число от 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, и помогите другим гикам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше