一、實驗目的及要求
1. 掌握凱撒密碼工作原理
2. 編寫程序實現凱撒加密
二、實驗設備(環境)及要求
PC機, VC++等
三、實驗內容與步驟
1、凱撒加密(對代碼中的主要內容進行分析講解)
步驟:
- 先調用scanf函數將要加密的字符串與k值輸入;
- 接着判斷k值是屬於[0,25]區間,如果不屬於,則輸出“k值不合法”,並結束程序;
- 然後對要加密的字符串的每個字符進行挨個加密,加密方法:先判斷加密前的字符與‘z’字符之間的差值是否小於k,如果小於k說明該字符加上k值後會超出範圍,所以該字符加密應先用k減去差值減去1,再將結果加到‘a’上,即 b[i]='a'+(k-('z'-a[i])-1);如果大於等於k則直接再原有字符的基礎上加上k,得出結果即可
- 輸出結果
- 解密
步驟:
(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’上。對於解密則反之。
|