⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 permutation.cpp

📁 经典密码学中列置换密码的实现 此为字符串版本的加解密实现 开发平台为VC6.0
💻 CPP
字号:
/********************************************************************
				Column permutation cipher的编程实现(非文件版)
				code by:xxs
				此函数只允许小写密钥
*********************************************************************/
/********************************************************************
列置换的原理说明:将一段明文按照密钥改成一定的形式
密钥用来决定列的置换顺序
**********************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//#include<iostream>
//using namespace std;
//sort the key by letter
typedef struct _Asiskey{
	char key;
	int index;
}Asistkey;
void SortKey(Asistkey *key,int n);
int main()
{
	char Key[50];//密钥
	char Ptext[500];//明文
	char Ctext[500];//密文
	char temp[500];//临时
//	char tem;

	//密钥处理
	printf("please input the key:");
	scanf("%s",Key);
	getchar();
	int n=strlen(Key);
	Asistkey *Akey=(Asistkey *)malloc(n*sizeof(Asistkey));
	for(int i=0;i<n;i++)
	{
		Akey[i].key=Key[i];
		Akey[i].index=i;
	}
	SortKey(Akey, n);
	//加密部分
	memset(Ptext,0,sizeof(Ptext));
	printf("please input ptext:");
	scanf("%s",Ptext);
	getchar();
	int m=strlen(Ptext);
	//明文处理
	int k=0;
	if((k=m%n)!=0)
	{
		k=m;
		m=(m/n)*n+n;
		for(;k<m;k++)
		{
			Ptext[k]='Q';
		}
	}
	
	printf("明文是:%s\n",Ptext);
	//加密
	memset(Ctext,0,sizeof(Ctext));
	for(i=0;i<m;i++)
	{
		for(k=0;k<n;k++)
			if(i%n==Akey[k].index)
				break;
		//Ctext[i/n*n+i%n]=Ptext[i/n*n+Akey[i%n].index];
		Ctext[i/n*n+i%n]=Ptext[i/n*n+k];
	}

	printf("密文是:%s\n",Ctext);
	
	//解密过程
	memset(temp,0,sizeof(temp));
	for(i=0;i<m;i++)
	{
		//temp[i/n*n+ i%n]=Ctext[i/n*n+Akey[i%n].index];
		for(k=0;k<n;k++)
			if(i%n==Akey[k].index)
				break;
		temp[i/n*n+ k]=Ctext[i/n*n+i%n];

	}
	printf("解密是:%s\n",temp);

	return 0;
}
//
void SortKey(Asistkey *key,int n)
{
	Asistkey temp;
	int i,j,k;
	i=j=k=0;
	
	for(i=0;i<n-1;i++)
	{
		j=i;
		for(k=j+1;k<n;k++)
		{
			if(key[j].key >key[k].key )
				j=k;
		}
		if(j!=i)
		{
			temp.key = key[i].key ;
			temp.index = key[i].index ;
			key[i].key =key[j].key ;
			key[i].index = key[j].index ;
			key[j].key =temp.key;
			key[j].index = temp.index ;
		}
	}
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -