본문 바로가기
A. 언어/C

[암호수학] 카이사르 암호화문 복호화

by E-HO 2018. 3. 15.
728x90

카이사르 암호화

(Caesar’s cipher)



카이사르 암호화된 위 암호문을 복호화 해보자


일반적인 shift 연산으로 암호화 된 것이 아니라 불규칙적으로 암호화 되어있다

그래서

"알파벳 빈도수"

를 이용하여 해결해보자


위 그래프는 영어 문장에서 알파벳이 나타나는 빈도수이다.

따라서 먼저 암호문의 빈도수를 구하고 빈도수에 맞춰서 다른 문자로 

치환

하는 코드를 짜면 될것 같다.


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
#include <stdio.h>
 
char *change(char *letter){
    char before,after;
    int i,j;
    
    printf("\n\n치환할 문자를 입력해주세요 : ");
    scanf("%c",&before);
    getchar();
    printf("무엇으로 치환할까요 : "); 
    scanf("%c",&after);
    getchar();
    printf("%c -> %c\n",before,after);
    
    for(i=0; i<2000; i++){
        if(letter[i]==before){
            letter[i]=after;
        }
    }
    return letter;
}
 
int main(){
    int num[26]={0};
    char letter[2000="APS ZU BMS THAAMT KB SOP CHAAPJ MQ LPUWHKX. K UHJ SM JMZ SMLHJ VJ QXKPBLU -- UM PCPB SOMZDO TPQHEP SOP LKQQKEZASKPU MQ SMLHJ HBL SMVMXXMT, K USKAA OHCP H LXPHV. KS KU H LXPHV LPPWAJ XMMSPL KB SOP HVPXKEHB LXPHV. K OHCP H LXPHV SOHS MBP LHJ SOKU BHSKMB TKAA XKUP ZW HBL AKCP MZS SOP SXZP VPHBKBD MQ KSU EXPPL: TP OMAL SOPUP SXZSOU SM IP UPAQ-PCKLPBS, SOHS HAA VPB HXP EXPHSPL PGZHA. K OHCP H LXPHV SOHS MBP LHJ MB SOP XPL OKAAU MQ DPMXDKH SOP UMBU MQ QMXVPX UAHCPU HBL SOP UMBU MQ QMXVPX UAHCP MTBPXU TKAA IP HIAP SM UKS LMTB SMDPSOPX HS SOP SHIAP MQ IXMSOPXOMML. K OHCP H LXPHV SOHS MBP LHJ PCPB SOP USHSP MQ VKUUKUUKWWK, H USHSP UTPASPXKBD TKSO SOP OPHS MQ KBFZUSKEP, UTPASPXKBD TKSO SOP OPHS MQ MWWXPUUKMB, TKAA IP SXHBUQMXVPL KBSM HB MHUKU MQ QXPPLMV HBL FZUSKEP. K OHCP H LXPHV SOHS VJ QMZX AKSSAP EOKALXPB TKAA MBP LHJ AKCP KB H BHSKMB TOPXP SOPJ TKAA BMS IP FZLDPL IJ SOP EMAMX MQ SOPKX URKB IZS IJ SOP EMBSPBS MQ SOPKX EOHXHESPX. K OHCP H LXPHV SMLHJ. K OHCP H LXPHV SOHS MBP LHJ LMTB KB HAHIHVH, TKSO KSU CKEKMZU XHEKUSU, TKSO KSU DMCPXBMX OHCKBD OKU AKWU LXKWWKBD TKSO SOP TMXLU MQ KBSPXWMUKSKMB HBL BZAAKQKEHSKMB -- MBP LHJ XKDOS SOPXP KB HAHIHVH AKSSAP IAHER IMJU HBL IAHER DKXAU TKAA IP HIAP SM FMKB OHBLU TKSO AKSSAP TOKSP IMJU HBL TOKSP DKXAU HU UKUSPXU HBL IXMSOPXU. K OHCP H LXPHV SMLHJ. K OHCP H LXPHV SOHS MBP LHJ PCPXJ CHAAPJ UOHAA IP PNHASPL, HBL PCPXJ OKAA HBL VMZBSHKB UOHAA IP VHLP AMT, SOP XMZDO WAHEPU TKAA IP VHLP WAHKB, HBL SOP EXMMRPL WAHEPU TKAA IP VHLP USXHKDOS, HBL SOP DAMXJ MQ SOP AMXL UOHAA IP XPCPHAPL HBL HAA QAPUO UOHAA UPP KS SMDPSOPX.";
    int i,j;
    
    for(i=0; i<2000; i++){
        for(j=0; j<26; j++){
            if(letter[i]==65+j){
                num[j]+=1;
                break;    
            }
        }
    }
            
    for(i=0; i<26; i++){
        printf("%c : %d\n",65+i,num[i]);
    }
    
    printf("%s",letter);
    
    while(1) {
        printf("%s",change(letter));    
    }
}
cs


이렇게 빈도수가 나오고

이런식으로 치환하다보면


완성

반응형

'A. 언어 > C' 카테고리의 다른 글

[C언어] 설문지 통계 프로그램  (0) 2018.06.05
[백준] 1026번: 보물  (1) 2017.08.17
[백준] 1037번: 약수  (0) 2017.07.27
[백준] 1010번: 다리놓기  (0) 2017.07.09
[백준] 1009번: 분산처리  (1) 2017.06.29