《信息安全原理及应用》课程设计报告
RAS设计与实现
姓 名: 班 级: 学 号: 指导教师: 成 绩: 完成时间:2010—12—22 完成地点:软三实验室
一、 设计题目描述和要求
通过课程设计,加深对信息安全技术及其应用的理论知识的理解,掌握一些非对称密码(RSA)的加密和解密算法,能够单独或合作完成一个加密和解密算法的过程并用软件展示出来,完成课程设计报告。
这次课程设计是以小组为单位进行的,组长为马广耀,成员分别为朱忱忱、李佳佳、王露露、马真、阮盈盈、彭丽梅、屈杨、李伯伦。我们组做的是非对称密码RSA的加密和解密算法。非对称密码(RSA)指的是用不同的密钥来加密和解密,解决了对称密码系统中密钥安全传输的问题。非对称密码具有更高的安全行,更加利于密钥分发和管理。
二、 详细设计
1、RSA原理:
密钥产生:
任意选择不相等的两个大质数 p 和 q, 计算 N=p*q。
不大于N且与N互质的整数个数为(p-1)*(q-1)(根据欧拉函数)。 选择一个整数e小于而且与(p-1)(q-1)互质。 计算d: d=e^{-1}mod(p-1)(q-1) 公钥:{e,N} 私钥:{d,N} 加密: 消息 M 明文 M=C^{d}modN 2、C#代码实例: using System; using System.Collections.Generic; using System.Text; namespace ClassLibrary3 1 { public class Class1 { static void Main(string[] args) { Class1 cla = new Class1(); double p, q, e, d = 1, m, n, t; Console.WriteLine(\"请输入p的值\"); p = Convert.ToInt32(Console.ReadLine()); if (cla.check(p)) { Console.WriteLine(\"输入的值符合要求\"); } else { do { Console.WriteLine(\"输入的p值不符合要求 请重新输入\"); p = Convert.ToDouble(Console.ReadLine()); } while (!cla.check(p)); } Console.WriteLine(\"请输入q的值\"); q = Convert.ToDouble(Console.ReadLine()); if (cla.check(q)) { Console.WriteLine(\"输入的值符合要求\"); } else { do { Console.WriteLine(\"输入的q值不符合要求 请重新输入\"); q = Convert.ToInt32(Console.ReadLine()); } while (!cla.check(q)); } n = p * q; t = (p - 1) * (q - 1); Console.WriteLine(\"请输入t的值:\" + t); Console.WriteLine(\"请输入e的值 必须是素数且小于t 互为素数\"); e = Convert.ToDouble(Console.ReadLine()); while (t % e == 0) { Console.WriteLine(\"输入的e值不符合要求 请重新输入\"); e = Convert.ToInt32(Console.ReadLine()); }; 2 int f = Convert.ToInt32(e); int w = Convert.ToInt32(t); int pd = 0; while (pd != 1) { int kl = 1; pd = 0; if (t > e) { while (kl != 0) { kl = Convert.ToInt32(t % e); if (kl == 0) { pd = Convert.ToInt32(e); } t = e; e = kl; } } else { while (kl != 0) { kl = Convert.ToInt32(t % e); if (kl == 0) { pd = Convert.ToInt32(e); } t = e; e = kl; } } if (pd != 1) { Console.WriteLine(\"输入的e值不符合要求 请重新输入\"); e = Convert.ToDouble(Console.ReadLine()); f = Convert.ToInt32(e); t = Convert.ToInt32(w); } } e = f; t = w; while (e * d % t != 1) { d++; } 3 Console.WriteLine(\"输如要加密的数字\"); m = Convert.ToDouble(Console.ReadLine()); double l = cla.gh(m, e, n); Console.WriteLine(\"加密后的数据为\" + Convert.ToString(l)); Console.WriteLine(\"请输入1开始解密\"); if (Convert.ToInt32(Console.ReadLine()) == 1) { double j = cla.gh(l, d, n); Console.WriteLine(\"解密后的数据为\"+ Convert.ToString(j)); } } //检查有没有公因数 public bool check(double l) { bool h = true; for (double i = 2; i < l; i++) { if (l % i == 0) { h = false; break; } } return h; } public double gh(double t, double pj, double h) { int l =Convert .ToInt32 ( t); for (double i = 1.0; i < pj; i++) { l =Convert .ToInt32 ( l) * Convert .ToInt32 (t); l = l % Convert .ToInt32 ( h); } return l; } } } 3)结果说明: 输入p=41,q=71,Ф(p*q)=2800,输入e=71公钥是(71,2911),私钥是(631,2911)输入明文M=321,使用公钥加密密文为C=1457,使用私钥解密得到明文。(如图下图所示)。 4 三、 小结 通过使用C#语言实现非对称加密(RSA),我明白了怎么产生公钥,怎么产生私钥。学会怎么使用欧几里得算法判断两个数是否互素,懂得了什么是欧拉函数,欧拉定理和乘法逆远,以及在RAS中怎么使用。把自己学到的理论运用到实践当中,为我下一步继续的深入学习打下基础。 5 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- howto1234.com 版权所有 湘ICP备2023017662号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务