logo

비제네르 암호

소개

Vigenere 암호는 텍스트를 암호화하고 해독하는 데 사용되는 알고리즘입니다. 비게네르 암호(Vigenere cipher)는 일련의 짜여진 시저 암호를 사용하여 알파벳 텍스트를 암호화하는 알고리즘입니다. 키워드의 문자를 기반으로 합니다. 다중 알파벳 대체 암호의 예입니다. 이 알고리즘은 이해하고 구현하기 쉽습니다. 이 알고리즘은 1553년에 처음으로 설명되었습니다. 지오반 바티스타 벨라소 . 텍스트의 암호화 및 암호 해독을 위해 Vigenere 테이블 또는 Vigenere 사각형을 사용합니다. Vigenere 테이블은 Tabula Recta라고도 합니다.

두 가지 방법으로 Vigenere 암호를 수행합니다.

방법 1

vigenere 테이블이 주어지면 이 방법으로 vigenere 테이블(26 * 26 행렬)을 사용하여 암호화 및 복호화를 수행합니다.

비제네르 암호

예: 일반 텍스트는 'JAVATPOINT'이고 키는 'BEST'입니다.

새 키를 생성하려면 일반 텍스트의 길이가 새 키와 같지 않은 한 지정된 키가 순환 방식으로 반복됩니다.

비제네르 암호

암호화

자바 해시맵이 뭐야?

일반 텍스트의 첫 번째 문자는 키의 첫 번째 문자와 결합됩니다. 일반 텍스트 'J' 열과 키 'B' 행이 vigenere 테이블의 알파벳 'K'와 교차하므로 암호문의 첫 글자는 'K'입니다.

마찬가지로 일반 텍스트의 두 번째 문자는 키의 두 번째 문자와 결합됩니다. 일반 텍스트 'A' 열과 키 'E' 행이 vigenere 테이블의 알파벳 'E'와 교차하므로 암호문의 두 번째 문자는 'E'입니다.

이 프로세스는 일반 텍스트가 완료될 때까지 계속됩니다.

암호문 = 켄투그박스

암호 해독

리눅스의 cp 명령

암호 해독은 vigenere 테이블의 키 행에 의해 수행됩니다. 먼저 핵심 문자의 행을 선택하고 해당 행에서 암호문 문자의 위치를 ​​찾은 다음 해당 암호문의 열 레이블을 일반 텍스트로 선택합니다.

비제네르 암호

예를 들어, 키 행에는 'B'가 있고 암호문은 'K'이며 이 암호문 문자는 'J' 열에 나타납니다. 이는 첫 번째 일반 텍스트 문자가 'J'임을 의미합니다.

다음으로 키 행에는 'E'가 있고 암호문은 'E'이며 이 암호문 문자는 'A' 열에 나타납니다. 이는 두 번째 일반 텍스트 문자가 'A'임을 의미합니다.

이 프로세스는 암호문이 완료될 때까지 계속됩니다.

일반 텍스트 = 자바포인트

방법 2

Vigenere 테이블이 제공되지 않으면 Vigenar가 이 방법으로 대수적 공식을 사용하여 암호화 및 암호 해독을 수행합니다(문자(A-Z)를 숫자(0-25)로 변환).

암호화 공식은,

그리고= (피+ K) 26에 반대

복호화 공식은,

= (E- 케이) 26에 반대

어떤 경우에도 (D) 값이 음수(-ve)가 되는 경우, 이 경우 음수 값에 26을 더하게 됩니다.

어디,

E는 암호화를 나타냅니다.

자바 숫자를 문자열로

D는 암호 해독을 나타냅니다.

P는 평문을 나타낸다.

K는 키를 나타냅니다.

참고: 'i'는 아래 표와 같이 문자 i번째 숫자의 오프셋을 나타냅니다.

비제네르 암호

예: 일반 텍스트는 'JAVATPOINT'이고 키는 'BEST'입니다.

암호화: 그리고= (피+ K) 26에 반대

일반 텍스트 제이 안에 영형 N
일반 텍스트 값(P) 09 00 이십 일 00 19 열 다섯 14 08 13 19
열쇠 그리고 에스 그리고 에스 그리고
키값(K) 01 04 18 19 01 04 18 19 01 04
암호문 값(E) 10 04 13 19 이십 19 06 01 14 23
암호문 케이 그리고 N 안에 G 영형 엑스

해독:= (E- 케이) 26에 반대

어떤 경우(Di) 값이 음수(-ve)가 되면 이 경우 음수 값에 26을 더하게 됩니다. 암호문의 세 번째 문자와 같습니다.

N = 13 및 S = 18

= (E- 케이) 26 반대

= (13 - 18) 대 26

힙 정렬

= 26에 대해 -5

= (-5 + 26) 대 26

= 21

암호문 케이 그리고 N 안에 G 영형 엑스
암호문 값(E) 10 04 13 19 이십 19 06 01 14 23
열쇠 그리고 에스 그리고 에스 그리고
키값(K) 01 04 18 19 01 04 18 19 01 04
일반 텍스트 값(P) 09 00 이십 일 00 19 열 다섯 14 08 13 19
일반 텍스트 제이 안에 영형 N

프로그램:

C 언어

 #include #include using namespace std; int main() { Vigenere cipher(&apos;VIGENERECIPHER&apos;); string original = &apos;I AM INDIAN&apos;; string encrypted = cipher.encrypt(original); string decrypted = cipher.decrypt(encrypted); cout &lt;&lt; original &lt;&lt; endl; cout &lt;&lt; &apos;Encrypted: &apos; &lt;&lt; encrypted &lt;&lt; endl; cout &lt;&lt; &apos;Decrypted: &apos; &lt;&lt; decrypted &lt;&lt; endl; } class Vigenere { public: string key; Vigenere(string key) { for (int i = 0; i = &apos;A&apos; &amp;&amp; key[i] key += key[i]; else if (key[i]&gt;= &apos;a&apos; &amp;&amp; key[i] key += key[i] + &apos;A&apos; - &apos;a&apos;; } } string encrypt(string text) { string out; for (int i = 0, j = 0; i = &apos;a&apos; &amp;&amp; c <= 2 26 'z') c +="A" - 'a'; else if (c continue; out key[j] * 'a') % j="(j" 1) key.length(); } return out; string decrypt(string text) { for (int i="0," && <="z" ) 26) }; pre> <p> <strong>Output:</strong> </p> <pre> I AM INDIAN Encrypted: SDERFGTUJ Decrypted: IAMINDIAN </pre> <hr></=>