가장 오래된 암호중 하나.
 줄리어스 시저(Julius Caesar)가 사용하여 그 이름이 유래.
 
 가장 대표적인 대치 암호(substitution cipher)

평문 문자를 다르 문자로 일대일 대응시켜 암호문을 만들어 내는 방식.

 
 a  0  n  13
 b  1  o  14
 c  2  p  15
 d  3 q  16
 e  4  r  17
 f  5  s  18
 g  6  t  19
 h  7  u  20
 i  8  v  21
 j  9  w 22 
 k  10  x  23
 l  11  y  24
 m 12   z  25

 영문 문자에 번호를 0부터 25까지 부여하여 이 문자를 비밀키와 조합하여 법연산하는 것이 특징.

만약 암호용 비밀키가 k라고 가정하고 평문은 p 암호문이 c라고 하면

c = p+k mod 26
m = c - k mod 26

이 되는 것이다.

여기서 시저 암호의 키는 평문의 시프트 간격인 k 가 되고 mod 26이란 모듈러 연산으로 합의 값을 다시 26으로 나눈 나머지 값을 의미한다.

ex

평문 :: My name is Peace
비밀 키 :: 6
암호문 ::  Se tgsk oy Vkgik
복호 키 ::-6
복호 문 :: My name is Peace

C++로 만들어진 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <cstring>
 
using namespace std;
 
int main()
{
    int i=0, key=0, str_size=0;
    char str[50={0,};
 
    cout<<"평문 또는 암호문을 입력하시오 "<<endl;
    gets(str); // Enter가 들어올때까지 입력을 받기위해 gets를 사용했다.    
 
    cout<<"키 값을 입력하세요 : ";
    cin>>key;    
 
    str_size=strlen(str); // 평문, 암호문의 길이를 구한다.    
 
    for(i=0;i<str_size;i++)
    {
        if((str[i]>='a')&&(str[i]<='z'))
        {
            str[i]-='a';
 
            if((str[i]+key) <0)
                str[i]+=26;            
 
            str[i] =(str[i]+key)%26;
            str[i]+='a';
        }        
 
        if((str[i] >='A')&&(str[i]<='Z'))
        {
            str[i]-='A';
 
            if((str[i]+key)<0)
                str[i]+=26;            
 
            str[i]=(str[i]+key)%26;
            str[i]+='A';
        }
    }    
 
    cout<<endl<<"암호화 또는 복호화된 결과 출력 : "<<str<<endl;
 
    return 0;
 
 
 
cs




+ Recent posts