logo

암호화의 카이사르 암호

  • 카이사르 암호는 율리우스 카이사르가 동맹국에게 비밀 메시지를 보내기 위해 사용한 간단한 암호화 기술입니다. 이는 일반 텍스트 메시지의 문자를 Shift 또는 키라고 하는 특정 위치만큼 이동하여 작동합니다.
  • Caesar Cipher 기술은 암호화 기술 중 가장 초기이자 간단한 방법 중 하나입니다. 이는 단순히 대체 암호의 한 유형입니다. 즉, 주어진 텍스트의 각 문자는 알파벳 아래로 고정된 수의 문자로 대체됩니다. 예를 들어, 1교대를 사용하면 A는 B로 대체되고 B는 C로 바뀌는 식입니다. 이 방법은 관리들과 의사소통을 하기 위해 이 방법을 사용한 것으로 보이는 율리우스 카이사르의 이름을 따서 명명된 것 같습니다.
  • 따라서 주어진 텍스트를 암호화하려면 텍스트의 각 문자가 아래로 이동한 위치 수를 나타내는 시프트라고 하는 정수 값이 필요합니다.
    암호화는 먼저 A = 0, B = 1,…, Z = 25라는 체계에 따라 문자를 숫자로 변환하여 모듈식 산술을 사용하여 표현할 수 있습니다. 시프트 n에 의한 문자 암호화는 수학적으로 다음과 같이 설명할 수 있습니다.
  • 예를 들어, 시프트가 3이면 문자 A는 문자 D로 바뀌고, B는 E로, C는 F로 바뀌는 식입니다. 알파벳은 Z 다음에는 A에서 다시 시작되도록 순환됩니다.
  • 다음은 Caesar 암호를 사용하여 3의 시프트로 HELLO 메시지를 암호화하는 방법의 예입니다.
  1. 일반 텍스트 메시지를 적습니다: HELLO
  2. 이동 값을 선택합니다. 이 경우에는 3교대를 사용합니다.
  3. 일반 텍스트 메시지의 각 문자를 알파벳 오른쪽 세 자리 문자로 바꿉니다.

H는 K가 됩니다(H에서 3단 이동).

E는 H가 됩니다(E에서 3단 이동).



L이 O가 됨(L에서 3단 이동)

소프트웨어 테스팅의 종류

L이 O가 됨(L에서 3단 이동)

O는 R이 됩니다(O에서 3단 이동).



가상 메모리

4. 암호화된 메시지는 이제 KHOOR입니다.

  • 메시지를 해독하려면 각 문자를 동일한 위치만큼 뒤로 이동하면 됩니다. 이 경우 KHOOR의 각 문자를 3자리 뒤로 이동하여 원래 메시지인 HELLO를 가져옵니다.


E_n(x)=(x+n)mod 26
(시프트 n을 사용한 암호화 단계)

D_n(x)=(x-n)mod 26
(시프트 n을 사용한 암호 해독 단계)



카이사르 사이퍼 3

예:

 Text : ABCDEFGHIJKLMNOPQRSTUVWXYZ Shift : 23 Cipher : XYZABCDEFGHIJKLMNOPQRSTUVW Text : ATTACKATONCE Shift : 4 Cipher : EXXEGOEXSRGI>

장점:

  • 구현 및 사용이 간편하여 초보자가 암호화에 대해 배우기에 적합합니다.
  • 특정 상황에서 유용할 수 있는 회전 디스크 세트나 스카이테일(scytale)로 알려진 카드 세트와 같이 물리적으로 구현될 수 있습니다.
  • 사전에 공유된 소수의 정보만 필요합니다.
  • 여러 교대 값이나 키워드를 사용하는 등 보다 안전한 변형을 만들기 위해 쉽게 수정할 수 있습니다.

단점:

  • 최신 암호 해독 방법으로는 안전하지 않습니다.
  • 공격자가 동일한 메시지의 암호화된 버전과 암호화되지 않은 버전 모두에 액세스할 수 있는 알려진 일반 텍스트 공격에 취약합니다.
  • 가능한 키 수가 적다는 것은 공격자가 올바른 키를 찾을 때까지 가능한 모든 키를 쉽게 시도할 수 있다는 것을 의미하므로 무차별 대입 공격에 취약해집니다.
  • 깨지기 쉽기 때문에 긴 텍스트 암호화에는 적합하지 않습니다.
  • 쉽게 깨지기 때문에 안전한 통신에는 적합하지 않습니다.
  • 메시지에 기밀성, 무결성 및 신뢰성을 제공하지 않습니다.

시저 암호의 특징:

  1. 대체 암호(Substitution cipher): 카이사르 암호(Caesar cipher)는 대체 암호의 일종으로, 평문의 각 문자를 알파벳 아래의 고정된 수만큼의 문자로 대체합니다.
  2. 고정 키: 카이사르 암호는 문자가 이동되는 위치 수인 고정 키를 사용합니다. 이 키는 발신자와 수신자 모두에게 알려져 있습니다.
  3. 대칭 암호화: Caesar 암호화는 대칭 암호화 기술입니다. 즉, 암호화와 복호화에 동일한 키가 사용됩니다.
  4. 제한된 키 공간: Caesar 암호에는 영어 알파벳의 문자가 26개만 있으므로 가능한 키가 26개에 불과한 매우 제한된 키 공간이 있습니다.
  5. 무차별 대입 공격에 취약함: Caesar 암호는 시도할 수 있는 키가 26개뿐이므로 무차별 대입 공격에 취약합니다.
  6. 구현 용이성: Caesar 암호는 구현하기가 매우 쉽고 간단한 산술 연산만 필요하므로 간단한 암호화 작업에 널리 사용됩니다.

카이사르 암호의 규칙:

inttostr 자바
  1. 1에서 25 사이의 숫자를 선택하세요. 이것이 교대 근무 값이 됩니다.
  2. A부터 Z까지 알파벳을 순서대로 적어보세요.
  3. 알파벳의 각 문자를 시프트 값만큼 시프트합니다. 예를 들어 이동 값이 3이면 A는 D가 되고, B는 E가 되고, C는 F가 되는 식입니다.
  4. 각 문자를 해당 문자로 바꿔서 메시지를 암호화하세요. 예를 들어, 이동 값이 3이면 hello라는 단어는 khoor가 됩니다.
  5. 메시지를 해독하려면 각 문자를 같은 양만큼 뒤로 이동하여 프로세스를 반대로 하면 됩니다. 예를 들어, 이동 값이 3이면 암호화된 메시지 khoor는 hello가 됩니다.

Caesar Cipher의 알고리즘:
입력:

8 대 1 멀티플렉서
  1. 1에서 25 사이의 이동 값을 선택합니다.
  2. A부터 Z까지 순서대로 알파벳을 적어보세요.
  3. 원본 알파벳의 각 문자를 시프트 값만큼 이동하여 새 알파벳을 만듭니다. 예를 들어 이동 값이 3인 경우 새 알파벳은 다음과 같습니다.
  4. A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
    D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
  5. 메시지의 각 문자를 새 알파벳의 해당 문자로 바꿉니다. 예를 들어, 이동 값이 3이면 hello라는 단어는 khoor가 됩니다.
  6. 메시지를 해독하려면 각 문자를 같은 양만큼 뒤로 이동하십시오. 예를 들어, 이동 값이 3이면 암호화된 메시지 khoor는 hello가 됩니다.

절차:

  • 주어진 텍스트를 한 번에 한 문자씩 탐색합니다.
  • 각 문자에 대해 텍스트를 암호화하는지 또는 해독하는지에 따라 규칙에 따라 주어진 문자를 변환합니다.
  • 생성된 새 문자열을 반환합니다.

Text(문자열)와 Shift 값(정수)을 받아 암호화된 텍스트를 반환하는 프로그램입니다.

C++

// A C++ program to illustrate Caesar Cipher Technique> #include> 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 // 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 of s> >public> static> StringBuffer encrypt(String text,>int> s)> >{> >StringBuffer result=>new> StringBuffer();> >for> (>int> i=>0>; 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)); } }>
>
>

파이썬3

#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))>
>
>

씨#

// A C# Program to illustrate Caesar Cipher Technique> using> System;> using> System.Text;> public> class> CaesarCipher> {> >// Encrypts text using a shift on s> >public> static> StringBuilder encrypt(String text,>int> s)> >{> >StringBuilder result=>new> StringBuilder();> >for> (>int> i=0; 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

// 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 >
>
>

자바스크립트

> //A Javascript Program to illustrate Caesar Cipher Technique> > >// Encrypts text using a shift on s> >function> encrypt(text, s)> >{> >let result=>''> >for> (let i = 0; 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 + ' '); document.write('Shift : ' + s + ' '); document.write('Cipher: ' + encrypt(text, s) + ' '); // This code is contributed by avanitrachhadiya2155>
>
>

산출
Text : ATTACKATONCE Shift: 4 Cipher: EXXEGOEXSRGI>

시간 복잡도: O(N) 여기서 N은 주어진 텍스트의 길이입니다.
보조 공간: 에)

암호를 해독하는 방법?
encrypt와 유사한 다른 함수 decrypt를 작성할 수 있습니다. 이 함수는 원본 텍스트를 해독하기 위해 반대 방향으로 주어진 시프트를 적용합니다. 그러나 우리는 모듈로에서 암호의 순환 속성을 사용할 수 있으므로 간단히 관찰할 수 있습니다.

Cipher(n) = De-cipher(26-n)>

따라서 동일한 함수를 사용하여 암호를 해독할 수 있습니다. 대신 Shift = 26-shift가 되도록 Shift 값을 수정하겠습니다(C++에서 실행되는 샘플은 이 내용을 참조하세요).