单表代替和多表代替密码体系

一、实验目的及要求

1. 掌握单表代替和多表代替密码体系

2. 从单表代替或多表代替密码中选取一个密码系统(除凯撒密码),编写程序实现该密码系统

 

二、实验设备(环境)及要求

   PC机, VC++等

三、实验内容与步骤

1、加密(对代码中的主要内容进行分析讲解)

步骤:

  1. 根据密钥构造出字母代替表;
  2. 将要加密的字符串的每一个字符都减去‘a’,得它们在26个字母表的位置;
  3. 知道位置后,找出它们在字母代替表中的位置,将其替换成对应的密文。

 

2、解密

步骤:

  1. 将要解密的字符串的每个字符与字母代替表的每个字符一一对比,找出字符串字符在字母代替表的相对位置。
  2. 知道位置后,将字符替换为为26个字母表中相应位置的字母。

代码:

#include<stdio.h>

void encrypt(char keystring[],char word[]);  //加密 
void decode(char keystring[],char word[]);   //解密 

int main()
{
	int i,j,temp;
	int m,count = 0;
	char key[20],keystring[26],word[100];
	char c = 'a';
	printf("请输入密钥key:");
	scanf("%s",key);
	for (i = 0; key[i] != '\0'; i++)   //根据密钥,构造字母代替表 
	{
		temp = 0;
		for(j = 0; j != i; j++)
		{
			if(key[i] == key[j])
			{
				temp = 1;
				break;
			}
		}
		if(temp == 0)
		{
			keystring[count] = key[i];
			count++;
		}
	}
	m = count;
	while(c <= 'z')
	{
		temp = 0;
		for(i = 0; i < m; i++)
		{
			if(c == keystring[i])
			{
				temp = 1;
			}
		}
		if(temp == 0)
		{
			keystring[count] = c;
			count ++;
		}
		c++;
	}
	printf("请输入要加密或解密的字符串:");
	scanf("%s",word);
	printf("请输入您要使用的功能:\n1.加密\n2.解密\n你要:");
	scanf("%d",&temp);
	switch(temp)
	{
		case 1:
			encrypt(keystring, word);
			break;
		case 2:
			decode(keystring, word);
			break; 
	}
	return 0;
}

void encrypt(char keystring[],char word[])   //加密 
{
	int i,temp;
	for(i =0; word[i] != '\0'; i++)
	{
		temp = word[i] - 'a';
		word[i] = keystring[temp];
	}
	printf("%s", word);
}

void decode(char keystring[],char word[])    //解密 
{
	int i,j;
	for(i =0; word[i] != '\0'; i++)
	{
		for(j = 0; j < 26; j++)
		{
			if(word[i] == keystring[j])
			{
				word[i] = 'a' + j;
				break;
			}
		}
	}
	printf("%s", word);
}

 

四、实验结果与数据处理

密钥:spect      明文:asdfgh

  1. 加密

 

 

 

  1. 解密(有上题得到密文:sqcabd)

 

 

 

五、分析与讨论

通过这个实验,我明白了单表代替密码的原理以及步骤。单表代替密码最为重要的是通过密钥创建出字母字母代替表(注意:密钥出现重复字符要记得跳过),然后再以字母代替表为基础进行加解密。

不过单表代替密码存在一个致命的缺点:可以通过对密文中出现的各个字母进行统计,找出它们各自出现的频率,进行假设,从而推导出相应的密钥(旁路攻击)。

发布了32 篇原创文章 · 获赞 8 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章