"시저 암호"라고도 불림
암호화를 할때 평문, 즉 보내고자 하는 메시지를 n번 씩 밀려서 암호화 하는 방법
매우 쉬운 만큼 복호화 과정도 쉬움
ex) I love cookie.
Key 값 | 암호문 |
---|---|
3 | ![]() |
4 | ![]() |
5 | ![]() |
#include <stdio.h>
#include <string.h>
int main()
{
char message[10000] = { 0, };
char ch;
int i, key;
printf("Caesar Cipher Decryption\n");
printf("\n");
printf("Ciphertext: KYVXIVRKVJKXCFIPZECZMZEXCZVJEFKZEEVMVIWRCCZEXSLKZEIZJZEXVMVIPKZDVNVWRCC.EVCJFEDREUVCR.KYVNRPKFXVKJKRIKVUZJKFHLZKKRCBZEXREUSVXZEUFZEX.NRCKUZJEVP.PFLIKZDVZJCZDZKVUJFUFEFKNRJKVZKCZMZEXJFDVFEVVCJVJCZWV.UFEFKSVKIRGGVUSPUFXDR.NYZTYZJCZMZEXNZKYKYVIVJLCKJFWFKYVIGVFGCVJKYZEBZEX.JKVMVAFSJ.ZWCZWVNVIVGIVUZTKRSCVZKNFLCUTVRJVKFSVCZWVREUSVNZKYFLKWCRMFI.VCVREFIIFFJVMVCK.ZWPFLCFFBRKNYRKPFLYRMVZECZWVPFLNZCCRCNRPJYRMVDFIV.ZWPFLCFFBRKNYRKPFLUFEFKYRMVZECZWVPFLNZCCCEVMVIYRMVVEFLXY.FGIRYNZEWIVP.ZWPFLJVKPFLIXFRCJIZUZTLCFLJCPYZXYREUZKZJRWRZCLIVPFLNZCCWRZCRSFMVVMVIPFEVVCJVJJLTTVJJ.ARDVJTRDVIFE.CZWVZJNYRKYRGGVEJNYVEPFLRIVSLJPDRBZEXFKYVIGCREJ.AFYECVEEFE.JGIVRUCFMVVMVIPNYVIVPFLXF.CVKEFFEVVMVITFDVKFPFLNZKYFLKCVRMZEXYRGGZVI.DFKYVIKVIVJR.NYVEPFLIVRTYKYVVEUFWPFLIIFGVKZVRBEFKZEZKREUYREXFE.WIREBCZEU.IFFJVMVCK.RCNRPJIVDVDSVIKYRKPFLRIVRSJFCLKVCPLEZHLV.ALJKCZBVVMVIPFEVVCJV.DRIXRIVKDVRU.UFEFKALUXVVRTYURPSPKYVYRIMVJKPFLIVRGSLKSPKYVJVVUJKYRKPFLGCREK.IFSVIKCFLZJJKVMVEJFE.KYVWLKLIVSVCFEXJKFKYFJVNYFSVCZVMVZEKYVSVRLKPFWKYVZIUIVRDJ.VCVREFIIFFJVMVCK.KVCCDVREUZWFIXVK.KVRTYDVREUZIVDVDSVI.ZEMFCMVDVREUZCVRIE.SVEARDZEWIREBCZE.KYVSVJKREUDFJKSVRLKZWLCKYZEXJZEKYVNFICUTREEFKSVJVVEFIVMVEKFLTYVUKYVPDLJKSVWVCKNZKYKYVYVRIK.YVCVEBVCCVI.ZKZJULIZEXFLIURIBVJKDFDVEKJKYRKNVDLJKWFTLJKFJVVKYVCZXYK.RIZJKFKCV.NYFVMVIZJYRGGPNZCCDRBVFKYVIJYRGGPKFF.REEVWIREB.UFEFKXFNYVIVKYVGRKYDRPCVRUXFZEJKVRUNYVIVKYVIVZJEFGRKYREUCVRMVRKIRZC.IRCGYNRCUFVDVIJFE\n");
printf("\n");
printf("Key: 17\n");
printf("\n");
strcpy_s(message, 10000, "KYVXIVRKVJKXCFIPZECZMZEXCZVJEFKZEEVMVIWRCCZEXSLKZEIZJZEXVMVIPKZDVNVWRCC.EVCJFEDREUVCR.KYVNRPKFXVKJKRIKVUZJKFHLZKKRCBZEXREUSVXZEUFZEX.NRCKUZJEVP.PFLIKZDVZJCZDZKVUJFUFEFKNRJKVZKCZMZEXJFDVFEVVCJVJCZWV.UFEFKSVKIRGGVUSPUFXDR.NYZTYZJCZMZEXNZKYKYVIVJLCKJFWFKYVIGVFGCVJKYZEBZEX.JKVMVAFSJ.ZWCZWVNVIVGIVUZTKRSCVZKNFLCUTVRJVKFSVCZWVREUSVNZKYFLKWCRMFI.VCVREFIIFFJVMVCK.ZWPFLCFFBRKNYRKPFLYRMVZECZWVPFLNZCCRCNRPJYRMVDFIV.ZWPFLCFFBRKNYRKPFLUFEFKYRMVZECZWVPFLNZCCCEVMVIYRMVVEFLXY.FGIRYNZEWIVP.ZWPFLJVKPFLIXFRCJIZUZTLCFLJCPYZXYREUZKZJRWRZCLIVPFLNZCCWRZCRSFMVVMVIPFEVVCJVJJLTTVJJ.ARDVJTRDVIFE.CZWVZJNYRKYRGGVEJNYVEPFLRIVSLJPDRBZEXFKYVIGCREJ.AFYECVEEFE.JGIVRUCFMVVMVIPNYVIVPFLXF.CVKEFFEVVMVITFDVKFPFLNZKYFLKCVRMZEXYRGGZVI.DFKYVIKVIVJR.NYVEPFLIVRTYKYVVEUFWPFLIIFGVKZVRBEFKZEZKREUYREXFE.WIREBCZEU.IFFJVMVCK.RCNRPJIVDVDSVIKYRKPFLRIVRSJFCLKVCPLEZHLV.ALJKCZBVVMVIPFEVVCJV.DRIXRIVKDVRU.UFEFKALUXVVRTYURPSPKYVYRIMVJKPFLIVRGSLKSPKYVJVVUJKYRKPFLGCREK.IFSVIKCFLZJJKVMVEJFE.KYVWLKLIVSVCFEXJKFKYFJVNYFSVCZVMVZEKYVSVRLKPFWKYVZIUIVRDJ.VCVREFIIFFJVMVCK.KVCCDVREUZWFIXVK.KVRTYDVREUZIVDVDSVI.ZEMFCMVDVREUZCVRIE.SVEARDZEWIREBCZE.KYVSVJKREUDFJKSVRLKZWLCKYZEXJZEKYVNFICUTREEFKSVJVVEFIVMVEKFLTYVUKYVPDLJKSVWVCKNZKYKYVYVRIK.YVCVEBVCCVI.ZKZJULIZEXFLIURIBVJKDFDVEKJKYRKNVDLJKWFTLJKFJVVKYVCZXYK.RIZJKFKCV.NYFVMVIZJYRGGPNZCCDRBVFKYVIJYRGGPKFF.REEVWIREB.UFEFKXFNYVIVKYVGRKYDRPCVRUXFZEJKVRUNYVIVKYVIVZJEFGRKYREUCVRMVRKIRZC.IRCGYNRCUFVDVIJFE.");
key = 17;
for (i = 0; message[i] != '\0'; ++i) {
ch = message[i];
if (ch >= 'a' && ch <= 'z') {
ch = ch - key;
if (ch < 'a') {
ch = ch + 'z' - 'a' + 1;
}
message[i] = ch;
}
else if (ch >= 'A' && ch <= 'Z') {
ch = ch - key;
if (ch < 'A') {
ch = ch + 'Z' - 'A' + 1;
}
message[i] = ch;
}
else if (ch == '.') {
message[i] = ch;
}
}
printf("plaintext: %s\n", message);
return 0;
}
다중 단일 문자 치환 암호법의 한 종류로 키워드를 이용한 암호법
<장점>
ex)
원문 : johnwick
Key 값 : sky
암호문 : byffgguu
#include <stdio.h>
#include <string.h>
int main()
{
char message[10000] = { 0, };
char key[10] = { 0, };
char msg_char, key_char;
int i, msg_len, key_len;
printf("Vigenere Cipher Decryption\n");
printf("\n");
printf("Ciphertext: SQRQEDCUENMSUENMSUENMSUENMSZLIDHYIFVCFVCKIJITROKWMIDCENCDCENCDCENCDCENCWDAEKFZRGKZCQYPOMSRSHVFRKBUWBBOEHSLFRRDCPIENNGXMVOAVWOWSJTAMSWSRLCKLMIVRRDCVRRDCVRRDCVRRDCMVEHISRLCKIJIIDUFISYBRRDYBRRDYBRRDSHXSECCEENNCEENNCECEKVZXHBCNQYROEHSEDZRTRSRMRCCDITSAVWSKMZRGKMVSHQCKXAVSKKOSKRRNKQVPELFRXEKBUPIFSDCLSTVWAIWEKAICYFALMCITCUFGAEGVAEQCEVOMYKLICQCYBGSXSNQCRPLXWXLTGSXSNVWXLTSHLTLSYVMTCRPRAWWKICKIJIIDCCHYYIFRCOBFAIDCCHYYIKAIMSNIGYBCMGRHZXUZZZOESHJHYXODMTOWTEMOHFQOFSDSVOAFZEWCMIGOHFYTDVVAAICWQEKBUQYMFVACBSNGROKTVEGWDMNDVVGLEPJSIWUFRNKRFHONCUSJEGKAHKHKLEPITOCKAVLEBSKSDYRFHONCPIARMVEHMOLWESHXSECCEENNCEENNCEENNWKKOOGFRAXRFRAXRFRYOOYMTRFFAMIVRRDCIGMNDVVEIBGFQEDWDISCOPMNQOPSHQCKXAVSKKOSKRRNKQVPELFRXEKBUPIFSDCLSTVWAIWEKAICYFALMCITCUFGAEGVAEQCEVOMYKLICQCYBGSXSNQCRPLXWXLTGSXSNVWXLTSHLTLSYVMTCRPRAWWKICKIJIIDCCHYYIFRCOBFAIDCCHYYIKAIMSNIGYBCMGRHZXUZZZOESHJHYXODMTOWDKOXBRXAUSZXAVZZMMQCERALSKLEVOJXOXSJXAXRZRGRWXLEBCMIRKZCMIWUFRNKPVXHOZRWTYBVPAXRZRGMOLWESWZFEVWVZESHRRDSWZMJEGKAAXHZXAVZZNUCHNENDWKELVWDKOXBRTUDAPLAXRJMNDVVEIBVRRDCWEXHOOZVPEHPSUBVRRDCWEXHOOZVIDVISWWMYENNGLTIXHYIASFJSMOHZQECGRCIXURCORUFXTKZVXGYWNENXOTILOPIETOOEHLSJVQYVWWISKMZRGKMFLBKPPPEDGXSCKIJIWOUFRRYQBXHSGTPULKVKOXUFELVBZKHDKVKOXZZKHDWKYPVWBIIDGUCNKAZXEMOLWESHFPDICLSNMSESWSHFPDICLXWSQVAEQCEPIQVKMTEDCMKOWKWDIBRQIDS\n");
printf("\n");
printf("Key: korea\n");
printf("\n");
strcpy_s(message, 10000, "SQRQEDCUENMSUENMSUENMSUENMSZLIDHYIFVCFVCKIJITROKWMIDCENCDCENCDCENCDCENCWDAEKFZRGKZCQYPOMSRSHVFRKBUWBBOEHSLFRRDCPIENNGXMVOAVWOWSJTAMSWSRLCKLMIVRRDCVRRDCVRRDCVRRDCMVEHISRLCKIJIIDUFISYBRRDYBRRDYBRRDSHXSECCEENNCEENNCECEKVZXHBCNQYROEHSEDZRTRSRMRCCDITSAVWSKMZRGKMVSHQCKXAVSKKOSKRRNKQVPELFRXEKBUPIFSDCLSTVWAIWEKAICYFALMCITCUFGAEGVAEQCEVOMYKLICQCYBGSXSNQCRPLXWXLTGSXSNVWXLTSHLTLSYVMTCRPRAWWKICKIJIIDCCHYYIFRCOBFAIDCCHYYIKAIMSNIGYBCMGRHZXUZZZOESHJHYXODMTOWTEMOHFQOFSDSVOAFZEWCMIGOHFYTDVVAAICWQEKBUQYMFVACBSNGROKTVEGWDMNDVVGLEPJSIWUFRNKRFHONCUSJEGKAHKHKLEPITOCKAVLEBSKSDYRFHONCPIARMVEHMOLWESHXSECCEENNCEENNCEENNWKKOOGFRAXRFRAXRFRYOOYMTRFFAMIVRRDCIGMNDVVEIBGFQEDWDISCOPMNQOPSHQCKXAVSKKOSKRRNKQVPELFRXEKBUPIFSDCLSTVWAIWEKAICYFALMCITCUFGAEGVAEQCEVOMYKLICQCYBGSXSNQCRPLXWXLTGSXSNVWXLTSHLTLSYVMTCRPRAWWKICKIJIIDCCHYYIFRCOBFAIDCCHYYIKAIMSNIGYBCMGRHZXUZZZOESHJHYXODMTOWDKOXBRXAUSZXAVZZMMQCERALSKLEVOJXOXSJXAXRZRGRWXLEBCMIRKZCMIWUFRNKPVXHOZRWTYBVPAXRZRGMOLWESWZFEVWVZESHRRDSWZMJEGKAAXHZXAVZZNUCHNENDWKELVWDKOXBRTUDAPLAXRJMNDVVEIBVRRDCWEXHOOZVPEHPSUBVRRDCWEXHOOZVIDVISWWMYENNGLTIXHYIASFJSMOHZQECGRCIXURCORUFXTKZVXGYWNENXOTILOPIETOOEHLSJVQYVWWISKMZRGKMFLBKPPPEDGXSCKIJIWOUFRRYQBXHSGTPULKVKOXUFELVBZKHDKVKOXZZKHDWKYPVWBIIDGUCNKAZXEMOLWESHFPDICLSNMSESWSHFPDICLXWSQVAEQCEPIQVKMTEDCMKOWKWDIBRQIDS");
strcpy_s(key, 10, "korea");
msg_len = strlen(message);
key_len = strlen(key);
for (i = 0; i < msg_len; i++)
{
if (message[i] >= 'A' && message[i] <= 'Z')
msg_char = 'A';
else if (message[i] >= 'a' && message[i] <= 'z')
msg_char = 'a';
if (key[i % key_len] >= 'A' && key[i % key_len] <= 'Z')
key_char = 'A';
else if (key[i % key_len] >= 'a' && key[i % key_len] <= 'z')
key_char = 'a';
message[i] = ((message[i] - msg_char - key[i % key_len] + key_char + 26) % 26) + msg_char;
}
printf("plaintext: %s\n", message);
return 0;
}