您好,欢迎来到好兔宠物网。
搜索
您的当前位置:首页《RAS设计与实现》课程设计

《RAS设计与实现》课程设计

来源:好兔宠物网


《信息安全原理及应用》课程设计报告

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密文 C=M^{e}modN 解密:

明文 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

本站由北京市万商天勤律师事务所王兴未律师提供法律服务