凱撒密碼

一、實驗目的及要求

1. 掌握凱撒密碼工作原理

2. 編寫程序實現凱撒加密

 

二、實驗設備(環境)及要求

   PC機, VC++等

三、實驗內容與步驟

1、凱撒加密(對代碼中的主要內容進行分析講解)

步驟:

  1. 先調用scanf函數將要加密的字符串與k值輸入;
  2. 接着判斷k值是屬於[0,25]區間,如果不屬於,則輸出“k值不合法”,並結束程序;
  3. 然後對要加密的字符串的每個字符進行挨個加密,加密方法:先判斷加密前的字符與‘z’字符之間的差值是否小於k,如果小於k說明該字符加上k值後會超出範圍,所以該字符加密應先用k減去差值減去1,再將結果加到‘a’上,即    b[i]='a'+(k-('z'-a[i])-1);如果大於等於k則直接再原有字符的基礎上加上k,得出結果即可
  4. 輸出結果

 

  1. 解密

步驟:

(1)先調用scanf函數將要解密的字符串與k值輸入;

(2)接着判斷k值是屬於[0,25]區間,如果不屬於,則輸出“k值不合法”,並結束程序;

(3)然後對要解密的字符串的每個字符進行挨個解密,解密方法:先判斷加密的字符與‘a’字符之間的差值是否小於k,如果小於k說明該字符的明文加上k值後會超出範圍,所以該字符解密應先用k減去差值減去1,再用‘z’減去結果,即b[i]='z'-(k-(a[i]-'a')-1);;如果大於等於k則直接再原有字符的基礎上減上k,得出結果即可

(4)輸出明文結果

 

代碼

//凱撒加密
#include<stdio.h>
int main()
{
	char a[100],b[100];
	int i,k;
	printf("請輸入要加密的字符串(小寫字母):\n");
	scanf("%s",a);
	printf("請輸入k值(0<=k<=25):\n");
	scanf("%d",&k);
	if(k<0||k>25)
	{
		printf("k值不合法");
	}
	else
	{
		for(i=0;a[i]!='\0';i++)
		{
			if(k>('z'-a[i]))
			{
				b[i]='a'+(k-('z'-a[i])-1);
			}
			else
			{
				b[i]=a[i]+k;
			}
		}
		b[i]='\0';
		printf("加密後的密文:%s\n",b);
	}
	return 0;
}
//解密
#include<stdio.h>
int main()
{
	char a[100],b[100];
	int i,k;
	printf("請輸入已加密的字符串(小寫字母):\n");
	scanf("%s",a);
	printf("請輸入k值(0<=k<=25):\n");
	scanf("%d",&k);
	if(k<0||k>25)
	{
		printf("k值不合法");
	}
	else
	{
		for(i=0;a[i]!='\0';i++)
		{
			if(k>(a[i]-'a'))
			{
				b[i]='z'-(k-(a[i]-'a')-1);
			}
			else
			{
				b[i]=a[i]-k;
			}
		}
		b[i]='\0';
		printf("明 文:%s\n",b);
	}
	return 0;
}

四、實驗結果與數據處理

(1)對“abxz”這個字符串進行加密,k值爲10

 

 

(2)對以上加密後的字符串進行解密

 

 

 

五、分析與討論

     通過該實驗,我深入瞭解了凱撒密碼的工作原理:主要是用E=P-K,0<=K<=25,這個公式進行加密,如果加密完的結果大於‘z’,則應將超出部分加到‘a’上。對於解密則反之。

發佈了32 篇原創文章 · 獲贊 8 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章