密码学课程设计报告要求及模板

上传人:第*** 文档编号:33925137 上传时间:2018-02-19 格式:DOC 页数:10 大小:182.50KB
返回 下载 相关 举报
密码学课程设计报告要求及模板_第1页
第1页 / 共10页
密码学课程设计报告要求及模板_第2页
第2页 / 共10页
密码学课程设计报告要求及模板_第3页
第3页 / 共10页
密码学课程设计报告要求及模板_第4页
第4页 / 共10页
密码学课程设计报告要求及模板_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《密码学课程设计报告要求及模板》由会员分享,可在线阅读,更多相关《密码学课程设计报告要求及模板(10页珍藏版)》请在金锄头文库上搜索。

1、计算机与信息工程学院密码学课程设计报告(2013/2014 学年 第 二学期)题 目: Diffie-Hellman 密钥交换协议 系 别: 计算机与信息工程学院 专 业: 信息安全 班 级: 学 号: 姓 名: 成绩类别 成 绩个人考勤(20)实践成绩(40)总结报告(40)总成绩(100)等级制成绩2014 年 05 月 30 日密码学课程设计报告0(一)题目 Diffie-Hellman密钥交换协议(二)开发工具与环境:window7环境下的 Visual Studio2010(三)设计原理: Diffie-Hellman 算法的安全性基于求离散对数的困难性。算法的惟一目的是使得两个用户

2、能够安全地交换密钥,得到一个共享的会话密钥,算法本身不能用于加、解密,因此,这里用产生的最终的密钥作为仿射变换加密的密钥来实现对消息的加解密。Diffie-Hellman的设计原理如下:A 和 B两方要生成共享密钥 Y,则首先选定一个大素数 p,以及 p的原根 g,p,g为双方共享,用户 A选择一保密的随机证书 Xa,并将 Ya=gXa modp发送给用户 B,类似,B 选择一保密的随机整数 Xb,并将 Yb=gXb modp发送给用户 A.之后 A和 B分别由 Y=YbXa modp和 Y=YaXb计算出的就是共享密钥。因为 Xa,Xb是保密的,敌手只能得到 p,a,Ya,Yb,要想得到 Y

3、,必须得到 Xa,Xb中的一个,这意味着要求离散对数,因此敌手求 Y是不可行的,保证了安全。(四)系统功能描述及软件模块划分系统需手动输入随机数 Xa,Xb,点击确定后可以隐藏输入的随机数。在原文框中输入需要处理的原文,选择加密或者解密按钮,在结果框中会生成对应的解密或者加密的结果。系统共分为两个模块,一块是 Diffie-Hellman模块,用来处理输入的随机数,系统随机生成大素数并找到该大素数的原根,再按照算法思想最终生成共享密钥 Y.Mainwindow 模块通过函数接收 Diffie-Hellman模块的密钥(五)设计的核心代码MainWindow:MainWindow(QWidget

4、 *parent) :QMainWindow(parent),ui(new Ui:MainWindow) ui-setupUi(this);label1=findChild(label1);label2=findChild(label2);label3=findChild(label3);label4=findChild(label4);密码学课程设计报告1text1=findChild(textEdit1);text2=findChild(textEdit2);yuanwen=findChild(textEdit3);jieguo=findChild(textBrowser1);queren

5、=findChild(pushButton1);jiami=findChild(pushButton2);jiemi=findChild(pushButton3);fanhui=findChild(pushButton4);init();MainWindow:MainWindow()delete ui;void MainWindow:on_pushButton1_clicked() unsigned _int64 p,g,Alice_Y,Bob_Y,Alice_key,Bob_key;DiffieHellman Alice,Bob;Alice.init();Bob.init();Alice.C

6、reatePrimeAndGenerator();p=Alice.GetPrime();g=Alice.GetGenerator();Bob.SetPrimeAndGenerator(p,g);Alice.CreatePrivateKey(text1-toPlainText().toInt();Bob.CreatePrivateKey(text2-toPlainText().toInt();Alice_Y=Alice.GetPublicKey();Bob_Y=Bob.GetPublicKey();Alice_key=Alice.GetKey(Bob_Y);Bob_key=Bob.GetKey(

7、Alice_Y);this-Setkey(Alice_key);void MainWindow:on_pushButton2_clicked()eguo-clear();密码学课程设计报告2QString jg,yw;yw = yuanwen-toPlainText();for(int i = 0;i JiaMi(ywi); jieguo-append(jg);void MainWindow:on_pushButton4_clicked()init();void MainWindow:on_pushButton3_clicked() jieguo-clear();QString jg,yw;y

8、w = yuanwen-toPlainText();for(int i = 0;i JieMi(ywi); jieguo-append(jg);class DiffieHellmanpublic:DiffieHellman()p=0; g=0; X=0; Y=0;Key=0; void init();int CreatePrimeAndGenerator();unsigned _int64 GetPrime();unsigned _int64 GetGenerator();unsigned _int64 GetPublicKey();unsigned _int64 GetKey(unsigne

9、d _int64 HisPublieKey);int SetPrimeAndGenerator(unsigned _int64 Prime,unsigned _int64 Generator);int CreatePrivateKey(int key);private:_int64 GetRandNum( void );密码学课程设计报告3unsigned _int64 GenerateRandomNumber(void);_int64 XpowYmodN(_int64 x, _int64 y, _int64 N);bool IsItPrime (_int64 n, _int64 a) ;bo

10、ol MillerRabin (_int64 n, _int64 trials);unsigned _int64 GeneratePrime();int CreatePublicKey();int GenerateKey(unsigned _int64 HisPublicKey);unsigned _int64 p; /素数unsigned _int64 g; /对应的本原根unsigned _int64 X; /私钥unsigned _int64 Y; /公钥unsigned _int64 Key;/通讯密钥;void DiffieHellman:init()p=0; g=0; X=0; Y

11、=0; Key=0;_int64 DiffieHellman:GetRandNum( void )srand(unsigned)time(0);_int64 tmp = (_int64)rand()*(_int64)rand();return tmp;unsigned _int64 DiffieHellman:GenerateRandomNumber(void) static unsigned long rnd = 0x41594c49;static unsigned long x = 0x94c49514;LFSR(x);rnd=GetRandNum()x;ROT(rnd,7);return

12、 (unsigned _int64)GetRandNum() + rnd;_int64 DiffieHellman:XpowYmodN(_int64 x, _int64 y, _int64 N) _int64 tmp = 0;if (y=1) return (x % N);密码学课程设计报告4if (y&1)=0) tmp = XpowYmodN(x,y/2,N);return (tmp * tmp) % N); elsetmp = XpowYmodN(x,(y-1)/2,N);tmp = (tmp * tmp) % N);tmp = (tmp * x) % N);return (tmp) b

13、ool DiffieHellman:IsItPrime (_int64 n, _int64 a)_int64 d = XpowYmodN(a, n-1, n);if (d=1)return true;elsereturn false;bool DiffieHellman:MillerRabin (_int64 n, _int64 trials) _int64 a = 0;for (_int64 i=0; itrials; i+)a = (rand() % (n-3)+2;/ gets random value in 2.n-1if (IsItPrime (n,a)=false) return

14、false; return true; / n probably primeunsigned _int64 DiffieHellman:GeneratePrime() unsigned _int64 tmp = 0;tmp = GenerateRandomNumber() % MAX_PRIME_NUMBER;密码学课程设计报告5/ensure it is an odd numberif (tmp % 2)=0)tmp += 1;if (MillerRabin(tmp,5)=true) return tmp;do tmp+=2; while (MillerRabin(tmp,5)=false)

15、;return tmp;int DiffieHellman:CreatePrimeAndGenerator()/ 产生素数 p,和它的本原根 g unsigned _int64 q;bool f=true;while(f)p=GeneratePrime();q=p*2+1;if(MillerRabin(q,5)=true)f=false;f=true;while(f)g=GenerateRandomNumber() % (p-2);if(XpowYmodN(g, 2, p)!=1 & XpowYmodN(g, q, p)!=1)f=false; return 0;unsigned _int64 DiffieHellman:GetPrime()return p;unsigned _int64 DiffieHellman:GetGenerator()return g;int DiffieHellman:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号