通過編程實現Column permutation加密,更加深入的瞭解其原理,掌握Column permutation演算法。
步驟:
(1) 輸入密鑰
(2) 排出密鑰中字母的順序
(3) 輸入明文
(4) 按密鑰中字母的順序打亂明文順序
(5) 輸出密文
(6) 解密
(7) 輸出明文
#include<stdio.h>#include<string.h>int main(){int i,j,l,k,m,num[30];char key[30],plantext[100],plantext2[100],cipher[100];printf("please input the key\n");scanf("%s",key);l=strlen(key);for(i=0;i<l;i++){num[i]=0;for(j=0;j<l;j++){if(key[j]<=key[i]){num[i]=num[i]+1;}if(key[j]==key[i]&&j>i)num[i]=num[i]-1;}}printf("please input the plantext\n");scanf("%s",plantext);k=strlen(plantext);i=0;//末尾補xfor(m=k%l;m<l;m++){plantext[k+i]='x';i++;}if(k%l==0)//計算有多少行m=k/l;else m=k/l+1;printf("加密:\n");for(i=0;i<m;i++){for(j=0;j<l;j++){cipher[i*l+j]=plantext[i*l+num[j]-1];}}for(i=0;i<l;i++)//輸出密文{for(j=0;j<m;j++)printf("%c",cipher[j*l+i]);}printf("\n");printf("解密:\n");//解密密文for(i=0;i<m;i++){for(j=0;j<l;j++){plantext2[i*l+num[j]-1]=cipher[i*l+j];}}plantext2[(i-1)*l+j]='\0';printf("%s\n",plantext2);return 0;}
只能瞭解一下列置換密碼的原理,也就是動手練習練習,不能實際應用。
程式運行如下: