密码学—仿射密码实验报告
古典密碼算法實驗報告
姓名:空の城 學號:你猜 專業班級:網絡安全專業
一、實驗目的
通過編程實現替代密碼算法——仿射密碼算法,加深對古典密碼體制的了解,為深入學習密碼學奠定基礎。
二、實驗原理
仿射密碼的基本思想:加法密碼和乘法密碼結合就構成仿射密碼,仿射密碼的加密和解密算法是:
C=Ek(m)=(k1m+k2)mod nC=Ek(m)=(k1m+k2)mod n
M=Dk(c)=k1(c-k2)mod nM=Dk(c)=k1(c-k2)mod n o仿射密碼具有可逆性的條件是gcd(k,n)=1。當k1=1時,仿射密碼變為加法密碼,
當k2=0時,仿射密碼變為乘法密碼。o仿射密碼中的密鑰空間的大小為np(n),當n為26字母,p(n)=12,因此仿射密碼的密鑰空間為12×26=312。
三、實驗內容
本實驗以仿射密碼算法為對象,利用C++語言實現利用仿射密碼進行加密和解密的程序。
1)算法流程
將加密前的密文存入char類型的數組,char類型的數組ex存入加密后的值,a,b依次存放k1,k2,利用ascii碼,依次處理數據進行加密,輸出用+‘a’的ascii碼后轉換為字符即可,用遞歸的歐吉利函數求得a的逆元,用解密算法y[i] = (k1的逆元int(加密過的一個元素) –k1的逆元 k2) % 26;
2)程序代碼(算法實現)
#include <iostream>#include<math.h>#include<string.h>using namespace std;//模的取逆 歐幾里的遞歸實現int dx, y, q;void extend_Eulid(int aa, int bb){if (bb == 0) {dx = 1;y = 0;q = aa;}else {extend_Eulid(bb, aa%bb);int temp = dx;dx = y;y = temp - aa / bb*y;}}int main(){int a, b, YN, i, l;char c[100];int x[100], y[100];char ex[100];first:system("cls");cout << "依次輸入k =( a, b )的a, b值,需要滿足gcd(a,26) = 1 " << endl;cin >> a >> b;cout << "加密函數為 ex = " << a << "*x + " << b << endl;cout << endl <<"輸入你要加密的明文" << endl;cin >> c;//明文l = strlen(c);//獲取長度//encode 依次處理for (i = 0; i < l; i++){//轉化為數字x[i] = c[i] - 'a';ex[i] = (a * x[i] + b) % 26;}cout << "加密后的字母為:";//轉化為字符for (i = 0; i < l; i++){cout << char(ex[i] + 'a');}cout << endl;//decode 解密extend_Eulid(a, 26);//調用取逆dx = (dx+26) % 26;cout << "解密后的字母為:";for (i = 0; i < l; i++){y[i] = (dx*int(ex[i]) - dx*b) % 26;y[i] = (y[i] + 26) % 26;//避免附屬的出現cout << char(y[i] + 'a');}cout<<endl;system("pause");cout<<"繼續解密加密輸入1 退出0" <<endl;int pd=0;cin>>pd;if(pd==1)goto first;elsereturn 0;}四、運行結果
數據說明、運行結果說明、運行截圖
a、輸入文本:china is great 輸入密鑰k1、k2:5、3
加密輸出結果為:NMRQDRPHKXDU
解密輸出結果為:CHINA IS GREAT(大寫)
b、輸入文本 wanghaoxuan輸入密鑰k1=7 k2=3
輸出:加密后的字母為:bdqtadxindq
解密后的字母為:wanghaoxuan
運行截圖
五、實驗總結
在解密函數最后的時候,忽略了在求y[i] = (k1的逆元int(加密過的一個元素) –k1的逆元 k2) % 26;的時候出現負數的情況,通過查閱資料用y[i] = (y[i] + 26) % 26;即可避免負數的出現。開始用C語言寫但在字符的讀入和處理空格的時候有很多的麻煩getchar等函數,所以最后使用的是c++ 的cin的格式進行處理。
我的個人博客 空の城.
總結
以上是生活随笔為你收集整理的密码学—仿射密码实验报告的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件测试 - 缺陷管理篇
- 下一篇: 软件可靠性及其验证