1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. //암호화
  5. void encrypt(char* P, char* C,int* table)
  6. {
  7. int len;
  8. int i;
  9.  
  10. len=strlen(P);
  11.  
  12. for(i=0; i<len; i++){
  13. if(P[i]>='A' && P[i]<='Z')
  14. C[i]=table[P[i]-'A']-('a'-'A');
  15. else if(P[i]>='a' && P[i]<='z')
  16. C[i]=table[P[i]-'a'];
  17. else
  18. C[i]=P[i];
  19. }
  20. }
  21.  
  22. //복호화
  23. void decrypt(char* C, char* D, int* table)
  24. {
  25. int len;
  26. int i,j;
  27.  
  28. len=strlen(C);
  29.  
  30. for(i=0; i<len; i++){
  31. if(C[i]>='A' && C[i]<='Z')
  32. {
  33. for(j=0; j<26; j++)
  34. if((table[j]-('a'-'A'))==C[i])
  35. D[i]='A'+j;
  36. }
  37. else if(C[i]>='a' && C[i]<='z')
  38. {
  39. for(j=0; j<26; j++)
  40. if(table[j]==C[i])
  41. D[i]='a'+j;
  42. }
  43. else
  44. D[i]=C[i];
  45. }
  46. }
  47.  
  48.  
  49. int main()
  50. {
  51. char plain[50]="HelloWorld!MyNameisArgos";
  52. char crypt[50];
  53. char d_crypt[50];
  54. char key[26];
  55. //char alphbet[26]="
  56. int key_arr[26];
  57. int check[26]={0,};
  58. int i,j,len,key_len;
  59.  
  60.  
  61. strcpy(crypt,plain);
  62.  
  63. printf("키를 입력하세요.(소문자) : ");
  64. scanf("%s",&key);
  65.  
  66. key_len=strlen(key);
  67. len=strlen(plain);
  68.  
  69. j=0;
  70. for(i=0; i<key_len; i++){
  71. if(check[key[i]-'a']==0){
  72. check[key[i]-'a']=1;
  73. key[j++]=key[i];
  74. }
  75. }
  76. key[j]='\0';
  77. key_len=j;
  78.  
  79. printf("중복을 제거\nkey : %s\n\n",key);
  80. //printf("len : %d\n",key_len);
  81.  
  82. for(i=0; i<key_len; i++)
  83. key_arr[i]=key[i];
  84.  
  85. for(i=key_len; i<26; i++){
  86. for(j=0; j<26; j++){
  87. if(check[j]==0)
  88. {
  89. check[j]=1;
  90. key_arr[i]='a'+j;
  91. break;
  92. }
  93. }
  94. }
  95.  
  96. encrypt(plain,crypt,key_arr); //암호화
  97. printf("encrypt message : %s\n",crypt);
  98.  
  99. strcpy(d_crypt,crypt);
  100. decrypt(crypt,d_crypt,key_arr); //복호화
  101. printf("decrypt message : %s\n",d_crypt);
  102.  
  103.  
  104. return 0;
  105. }


'코드 저장소' 카테고리의 다른 글

[C] 치환 암호 (Substitution Cipher)  (0) 2017.03.15

+ Recent posts