日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

密码学—仿射密码实验报告

發布時間:2023/12/29 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 密码学—仿射密码实验报告 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

古典密碼算法實驗報告

姓名:空の城 學號:你猜 專業班級:網絡安全專業

一、實驗目的

通過編程實現替代密碼算法——仿射密碼算法,加深對古典密碼體制的了解,為深入學習密碼學奠定基礎。

二、實驗原理

仿射密碼的基本思想:加法密碼和乘法密碼結合就構成仿射密碼,仿射密碼的加密和解密算法是:

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的格式進行處理。

我的個人博客 空の城.

總結

以上是生活随笔為你收集整理的密码学—仿射密码实验报告的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。