密码学程序之Column permutation(列置换)加密

通过编程实现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;											//末尾补x
	for(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;
}

只能了解一下列置换密码的原理,也就是动手练习练习,不能实际应用。

程序运行如下:

密码学程序之Column permutation(列置换)加密_第1张图片


你可能感兴趣的:(密码学程序之Column permutation(列置换)加密)