单表代换加密程序

来源:互联网 发布:美篇官方软件下载 编辑:程序博客网 时间:2024/06/05 09:54
<span style="font-size:18px;"></span>
<span style="font-family:KaiTi_GB2312;font-size:18px;">看完密码学教程第一二三章完成了这个简单的单表代换加密程序设计。</span>
#include <stdio.h>#include <string.h>#define num 27int i,j,q,p,keynum,m=0;void table(char a[],char b[]);void encrypt(char c[],char d[2][100]);    char plaintextA[100],plaintextB[100],plaintextC[100];char keyA[num],keyB[num],keyC[num];char key[num],exchangetable[2][100],ciphertext[100];    char alphabet[]="abcdefghijklmnopqrstuvwxyz";void main(){printf("insert the plaintext:\n");gets(plaintextA);printf("insert the key:\n");gets(keyA);for (i=0;keyA[i]!='\0';i++){if (keyA[i]>'A'&&keyA[i]<'Z')keyA[i]=keyA[i]+32;}for (j=0;keyA[j]!='\0';j++){keyB[j]=keyA[j];            keyC[j]=keyB[j];}for (i=0;keyB[i]!='\0';i++){for (p=i;p>=0;p--)if (keyB[p-1]==keyC[i])keyC[i]=' ';        }for (i=0,q=0;keyC[i]!='\0';q++){if (keyC[q]!=' '){key[i]=keyC[q];keynum=i+1;i++;}}table(plaintextA,key);}void table(char plaintextA[],char key[]){p=0;for (i=0;i<27;i++){exchangetable[0][i]=alphabet[i];exchangetable[1][i]=key[i];}for (i=0;i<27;i++){for (j=0;j<keynum;j++){if (alphabet[i]==key[j]){j=keynum;m=1;}else m=0;}if (m==0){exchangetable[1][keynum+p]=alphabet[i];p++;}}for(i=0;i<2;i++)       {for(j=0;j<27;j++)        printf("%c ",exchangetable[i][j]);printf("\n");}encrypt(plaintextA,exchangetable);}void encrypt(char plaintextA[],char exchangetable[2][100]){for (i=0;i<100;i++){if (plaintextA[i]>='A'&&plaintextA[i]<='Z')plaintextB[i]=plaintextA[i]+32;else plaintextB[i]=plaintextA[i];}for (i=0;i<100;i++){if (plaintextB[i]>='a'&& plaintextB[i]<='z')    {for (j=0;j<27;j++){if (plaintextB[i]==exchangetable[0][j])ciphertext[i]=exchangetable[1][j];}}else ciphertext[i]=plaintextB[i];}printf(" ciphertext is :\n");for (i=0;ciphertext[i]!='\0';i++){if (ciphertext[i]>='a'&&ciphertext[i]<='z')printf("%c",ciphertext[i]-32);else printf("%c",ciphertext[i]);}printf("\n");}

0 0