rsa加解密实验报告

上传人:第*** 文档编号:31318540 上传时间:2018-02-06 格式:DOC 页数:15 大小:144.50KB
返回 下载 相关 举报
rsa加解密实验报告_第1页
第1页 / 共15页
rsa加解密实验报告_第2页
第2页 / 共15页
rsa加解密实验报告_第3页
第3页 / 共15页
rsa加解密实验报告_第4页
第4页 / 共15页
rsa加解密实验报告_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《rsa加解密实验报告》由会员分享,可在线阅读,更多相关《rsa加解密实验报告(15页珍藏版)》请在金锄头文库上搜索。

1、2一、 实践目的与意义(1)通过实践使信息安全专业学生加深对密码学基本原理和加解密理论知识的理解。(2)培养学生在计算机上实现不同类型加密、解密操作运算功能的能力。利用实现的典型加解密方法对输入明文或文件实施加密,并对密文或文件进行解密。能够实现基本的密钥分配方法。(3)培养学生具备简单网络程序开发能力,能够在两个联网终端间进行消息加解密操作。(4)通过参与信息加解密实践,提高学生的分析设计能力、开发过程的团队合作能力、组织管理能力和语言表达能力。二、 实践环境操作系统:win7 x64开发工具:VS2013上机地点:信息楼机房三、 项目组分工在组内,我负责 RSA 加解密部分的程序编辑和调试

2、四、 系统设计功能设计:单机:用户输入明文和两个素数用作密钥,程序输出密文 ;输入密文和两个密钥,程序输出明文双机:服务器端输入 MAC 地址后开始运行,用户向服务器端发送明文和两个作为密钥的素数,服务器端向客户端传送密文;用户向服务器发送密文和两个密钥,服务器端向客户端输出明文算法设计:读取用户输入的两个密钥 p 和 q,计算(p-1)*(q-1)的值,记为 t,再任取一个与 t 互素的数,记为 n,计算 nx=1(modt)中 x 的值,an(modpq)为加密,得到密文b;bx(mod253) 为解密,得到明文 a。界面交互设计:使用组内统一的加解密界面模板,具体界面设计见程序运行截图五

3、、 系统实现程序及界面运行截图:双机加解密:345单机加解密:程序代码及注释:头文件:#pragma onceclass RSApublic:RSA();RSA();static CString Encrpt(CString plaintext, int key);static CString Decrypt(CString ciphertext, int key); CString encrpt(CString plaintext, int key);CString decrypt(CString ciphertext, int key);int prime(int m);int gcd(i

4、nt x, int y);6int ExtendedEuclidean(int a, int b, int *r);int power(int a);int mod(int f, int g, int h);主程序:#include stdafx.h#include RSA.hRSA:RSA()RSA:RSA()int RSA:prime(int m) /判断是否为素数int i;for (i = 2; i= b)x3 = a;y3 = b;elsex3 = b;y3 = a;while (1)c = x3 / y3;t1 = x1 - c*y1;t2 = x2 - c*y2;x1 = y1;

5、x2 = y2;t3 = x3 - c*y3;x3 = y3;y1 = t1;y2 = t2;y3 = t3;if (y3 = 1)*r = y2;return 1;int RSA:power(int a) /2 的 a 次幂int b = 1, i;for (i = 1; i = a; i+)b = b * 2;return b;8int RSA:mod(int f, int g, int h) /加解密int i;ints = 1;for (i = 1; i = g; i+)s = s*f;s = s%h;return s;CString RSA:encrpt(CString plaint

6、ext, int key)CString ciphertext;int i, j, b, a, sum, k;int t, temp, l = 0, ch = 1, f, l1;int p, q, n, y, e, d = 0;int num200;char plain100;int plain1100, cipher100, al10000, bl10000;/ printf(请输入第一个大素数 p:); /输入两个大素数 p,qwhile (1)/scanf(%d, p = 519817;if (prime(p) = 1)break;elseprintf(p 不是素数,请重新输入:);/p

7、rintf(请输入第二个大素数 q:);while (1)/scanf(%d, q = 521887;if (prime(q) = 1)break;elseprintf(q 不是素数,请重新输入:);n = p*q;y = (p - 1)*(q - 1);9/printf(n = %d y = %dn, n, y);/printf(请输入一个整数 e:); /输入与 y 互素的整数 ewhile (1)/scanf(%d, e = key;if (gcd(e, y) = 1)break;else/printf(e 不符合条件,请重新输入:);AfxMessageBox(Le 不符合条件,请重新

8、输入);ExtendedEuclidean(e, y, /计算 d/printf(d = %dn, d);/printf(公钥:( %d , %d )n, e, n);/printf(私钥:( %d , %d )n, d, n);while (chn)/明文分块ch = ch * 2;l+;l = l - 1; /每块长度/printf(%dn, l);/printf(请选择:1.加密; 2.解密;n);/scanf(%d, b = 1;if (b = 1) /加密/ printf(请输入明文:);/ scanf(%s, int ii;for ( ii = 0; ii plaintext.Ge

9、tLength(); ii+)plainii = plaintextii;plainii = 0;10t = strlen(plain);/*明文信息数字化*/for (i = 0; it; i+) /转换为二进制j = 6;temp = plaini;while (temp != 0)ali * 8 + j + 1 = temp % 2;temp = temp / 2;j-;ali * 8 = 0;if (t * 8 % l = 0) /转为十进制f = t * 8 / l;for (i = 0; if; i+)sum = 0;for (j = 0; jl; j+)sum = sum + a

10、lj + i*f * power(l - 1 - j);numi = sum;/ printf(%d , numi);CString tmp;tmp.Format(_T(%d), numi);ciphertext += tmp;/ printf(n);elsef = t * 8 / l + 1;l1 = t * 8 % l;for (i = 0; if - 1; i+)sum = 0;11for (j = 0; jl; j+)sum = sum + alj + i*f * power(l - 1 - j);numi = sum;/ printf(%d , numi);CString tmp;t

11、mp.Format(_T(%d), numi);ciphertext += tmp;sum = 0;for (j = 0; jl1; j+)sum = sum + alj + i*l * power(l1 - 1 - j);numf - 1 = sum;/ printf(%dn, numf - 1);CString tmp;tmp.Format(_T(%d), numf-1);ciphertext += tmp;for (i = 0; if; i+) /对明文加密cipheri = mod(numi, e, n);/ printf(%d , cipheri);CString tmp;tmp.F

12、ormat(_T(%d), numi);ciphertext += tmp;/ printf(n);return ciphertext;CString RSA:decrypt(CString ciphertext, int key)CString plaintext;int i, j, b, a, sum, k;int t, temp, l = 0, ch = 1, f, l1;int p, q, n, y, e, d = 0;int num200;12char plain100;int plain1100, cipher100, al10000, bl10000;/printf(请输入第一个

13、大素数 p:); /输入两个大素数 p,qwhile (1)/scanf(%d, p = 519817;if (prime(p) = 1)break;elseprintf(p 不是素数,请重新输入:);/printf(请输入第二个大素数 q:);while (1)/ scanf(%d, q = 521887;if (prime(q) = 1)break;elseprintf(q 不是素数,请重新输入:);n = p*q;y = (p - 1)*(q - 1);/printf(n = %d y = %dn, n, y);/printf(请输入一个整数 e:); /输入与 y 互素的整数 ewhi

14、le (1)/scanf(%d, e = key;if (gcd(e, y) = 1)break;else/printf(e 不符合条件,请重新输入:);AfxMessageBox(Le 不符合条件,请重新输入);ExtendedEuclidean(e, y, /计算 d/printf(d = %dn, d);13/printf(公钥:( %d , %d )n, e, n);/printf(私钥:( %d , %d )n, d, n);while (chn)/明文分块ch = ch * 2;l+;l = l - 1; /每块长度/printf(%dn, l);b = 2;if (b = 2) /解密/printf(请输入密文的个数:);/scanf(%d, a = ciphertext.GetLength();for (i = 0; ia; i+)/printf(请输入第%d 个密文数字:, i + 1);/scanf(%d, cipheri = ciphertexti;for (i = 0; ia; i+)numi = mod

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

当前位置:首页 > 建筑/环境 > 工程造价

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