單表代替和多表代替密碼體系

一、實驗目的及要求

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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章