[C] 폴리비우스 암호(Polibius cipher)
2017. 3. 15. 23:06
- #include <stdio.h>
- #include <string.h>
- //암호화
- void encrypt(char* P, char* C,int* table)
- {
- int len;
- int i;
- for(i=0; i<len; i++){
- if(P[i]>='A' && P[i]<='Z')
- C[i]=table[P[i]-'A']-('a'-'A');
- else if(P[i]>='a' && P[i]<='z')
- C[i]=table[P[i]-'a'];
- else
- C[i]=P[i];
- }
- }
- //복호화
- void decrypt(char* C, char* D, int* table)
- {
- int len;
- int i,j;
- for(i=0; i<len; i++){
- if(C[i]>='A' && C[i]<='Z')
- {
- for(j=0; j<26; j++)
- if((table[j]-('a'-'A'))==C[i])
- D[i]='A'+j;
- }
- else if(C[i]>='a' && C[i]<='z')
- {
- for(j=0; j<26; j++)
- if(table[j]==C[i])
- D[i]='a'+j;
- }
- else
- D[i]=C[i];
- }
- }
- int main()
- {
- char plain[50]="HelloWorld!MyNameisArgos";
- char crypt[50];
- char d_crypt[50];
- char key[26];
- //char alphbet[26]="
- int key_arr[26];
- int check[26]={0,};
- int i,j,len,key_len;
- j=0;
- for(i=0; i<key_len; i++){
- if(check[key[i]-'a']==0){
- check[key[i]-'a']=1;
- key[j++]=key[i];
- }
- }
- key[j]='\0';
- key_len=j;
- //printf("len : %d\n",key_len);
- for(i=0; i<key_len; i++)
- key_arr[i]=key[i];
- for(i=key_len; i<26; i++){
- for(j=0; j<26; j++){
- if(check[j]==0)
- {
- check[j]=1;
- key_arr[i]='a'+j;
- break;
- }
- }
- }
- encrypt(plain,crypt,key_arr); //암호화
- decrypt(crypt,d_crypt,key_arr); //복호화
- return 0;
- }
'코드 저장소' 카테고리의 다른 글
[C] 치환 암호 (Substitution Cipher) (0) | 2017.03.15 |
---|