网络课程设计_学校网络课程设计

其他范文 时间:2020-02-28 02:49:05 收藏本文下载本文
【www.daodoc.com - 其他范文】

网络课程设计由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“学校网络课程设计”。

南 华 大 学

络 安

题目:RSA加解密算法 姓名: 学号:

导师: 全 网

1.实验目的通过C#语言编程实现Rsa加密算法,加深对公开密码体制的了解。

2.RSA原理

2.1 RSA概述

当前最著名、应用最广泛的公钥系统RSA是在1978年,由美国麻省理工学院(MIT)的Rivest、Shamir和Adleman在题为《获得数字签名和公开钥密码系统的方法》的论文中提出的。它是一个基于数论的非对称(公开钥)密码体制,是一种分组密码体制。其名称来自于三个发明者的姓名首字母。它的安全性是基于大整数素因子分解的困难性,而大整数因子分解问题是数学上的著名难题,至今没有有效的方法予以解决,因此可以确保RSA算法的安全性。RSA系统是公钥系统的最具有典型意义的方法,大多数使用公钥密码进行加密和数字签名的产品和标准使用的都是RSA算法。

RSA算法是第一个既能用于数据加密也能用于数字签名的算法,因此它为公用网络上信息的加密和鉴别提供了一种基本的方法。它通常是先生成一对RSA 密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册,人们用公钥加密文件发送给个人,个人就可以用私钥解密接受。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。

该算法基于下面的两个事实,这些事实保证了RSA算法的安全有效性: 1)已有确定一个数是不是质数的快速算法; 2)尚未找到确定一个合数的质因子的快速算法。

目前,日益激增的电子商务和其它因特网应用需求使公钥体系得以普及,这些需求量主要包括对服务器资源的访问控制和对电子商务交易的保护,以及权利保护、个人隐私、无线交易和内容完整性(如保证新闻报道或股票行情的真实性)等方面。公钥技术发展到今天,在市场上明显的发展趋势就是PKI与操作系统的集成,PKI是“Public Key Infrastructure”的缩写,意为“公钥基础设施”。公钥体制广泛地用于CA认证、数字签名和密钥交换等领域。

公钥加密算法中使用最广的是RSA。RSA算法研制的最初理念与目标是努力使互联网安全可靠,旨在解决DES算法秘密密钥的利用公开信道传输分发的难题。而实际结果不但很好地解决了这个难题;还可利用RSA来完成对电文的数字签名以抗对电文的否认与抵赖;同时还可以利用数字签名较容易地发现攻击者对电文的非法篡改,以保护数据信息的完整性。目前为止,很多种加密技术采用了RSA算法,该算法也已经在互联网的许多方面得以广泛应用,包括在安全接口层(SSL)标准(该标准是网络浏览器建立安全的互联网连接时必须用到的)方面的应用。此外,RSA加密系统还可应用于智能IC卡和网络安全产品。

2.2 RSA算法的编程思路

1)确定密钥的宽度。

2)随机选择两个不同的素数p处q,它们的宽度是密钥宽度的二分之一。3)计算出p和q的乘积n。

4)在2和Φ(n)之间随机选择一个数e , e 必须和Φ(n)互素,整数e用做加密密钥(其中Φ(n)=(p-1)*(q-1))。

5)从公式ed ≡ 1 mod Φ(n)中求出解密密钥d。6)得公钥(e,n), 私钥(d , n)。7)公开公钥,但不公开私钥。

8)将明文P(假设P是一个小于n的整数)加密为密文C,计算方法为: C = Pe mod n 9)将密文C解密为明文P,计算方法为:

P = Cd mod n 然而只根据n和e(不是p和q)要计算出d是不可能的。因此,任何人都可对明文进行加密,但只有授权用户(知道d)才可对密文解密

3.程序实现

本实验本采用C#语言,用Visual Studio下编程得到以下结果:

3.1

源程序如下:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;

using System.Windows.Forms;using System.IO;

namespace WindowsFormsApplication1 { public partial cla Form1 : Form { public Form1(){ InitializeComponent();}

private void button1_Click(object sender, EventArgs e){ Form2 form = new Form2();form.Show();} private void Form1_Load(object sender, EventArgs e){ radioButton1.Checked = true;}

private void radioButton1_CheckedChanged(object sender, EventArgs e){ if(radioButton1.Checked == true){ label2.Text = “加密”;label3.Text = “E”;label5.Text = “请选择加密文件”;button2.Text = “加密”;} else { label2.Text = “解密”;label3.Text = “D”;label5.Text = “请选择解密文件”;button2.Text = “解密”;}

}

private void button3_Click(object sender, EventArgs e){ openFileDialog1.ShowDialog();textBox3.Text = openFileDialog1.FileName;} private void button2_Click(object sender, EventArgs e){ if(radioButton1.Checked == true){

if(textBox3.Text!= “”){ string pathstring = textBox3.Text, s1 = @“d:Code.txt”;if(File.Exists(pathstring)){ FileStream fileStream = File.OpenRead(pathstring);

try { StreamReader reader = new StreamReader(fileStream, System.Text.Encoding.Default);

while(!reader.EndOfStream){ string s = reader.ReadLine();int i, j;int m = Convert.ToInt32(textBox1.Text);int n = Convert.ToInt32(textBox2.Text);char[] a = new char[s.Length];for(i = 0;i

else

{ MeageBox.Show(“你要读的文件不存在”);} }

} if(radioButton2.Checked == true){ textBox3.Text = openFileDialog1.FileName;if(textBox3.Text!= “”){ string pathstring = textBox3.Text, s1 = @“d:Info.txt”;if(File.Exists(pathstring)){ FileStream fileStream = File.OpenRead(pathstring);

try { StreamReader reader = new StreamReader(fileStream, System.Text.Encoding.Default);

while(!reader.EndOfStream){ string s = reader.ReadLine();int i, j;int m = Convert.ToInt32(textBox1.Text);int n = Convert.ToInt32(textBox2.Text);char[] a = new char[s.Length];for(i = 0;i

}}} reader.Close();} catch(Exception ex){ MeageBox.Show(ex.Meage);}}}}}}} 点击

源代码:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;

namespace WindowsFormsApplication1 { public partial cla Form2 : Form { public Form2(){ InitializeComponent();}

private void Form2_Load(object sender, EventArgs e)

{

}

private void label10_Click(object sender, EventArgs e){

}

private void textBox2_TextChanged(object sender, EventArgs e){ label13.Text = “”;if(textBox2.Text!= “”){ int m = Convert.ToInt32(textBox2.Text);int i, j;for(i = 2;i

private void button1_Click(object sender, EventArgs e){ int P = Convert.ToInt32(textBox1.Text);int Q= Convert.ToInt32(textBox2.Text);int N = P * Q;int R =(P-1)*(Q-1);int D = Convert.ToInt32(textBox3.Text);int I, E=0;for(I=2;I

private void textBox1_TextChanged(object sender, EventArgs e){ label12.Text = “”;if(textBox1.Text!= “”){ int m = Convert.ToInt32(textBox1.Text);int i, j;for(i = 2;i

}

} } 3.2 加密过程:

选择 原文.txt 为要加密的文件,Code.txt 为密文,Info.txt 为经过解密的文件如图:

原文:

密文:

经过解密可得:

由上知该实验已顺利完成!

4.心得和体会

以上这些是我根据RSA的加密原理,自已通过编程,亲自体会而来。RSA算法本身比较简单,做一个实验的时候,遇到的困难主要是在编程,由于C#语言为面向对象的语言,具有良好的与用户接口,故采用这种语言。编程中在输入输出流这个地方出了一点问题,花了比较长的时候才把原因找到,并最终将程序完成.由于条件所限,在选取加密钥的时候,取数都比较小,实际应用中,数字会很大,但基本原理算法是一样的。

本实验仍有些不足,比如说,加密比较大的文件时,比较吃力,花费时间较多。

虽然有以上困难和问题,最终还是成功的将这个实验做成,在一定的程度上加强了编程能力和对RSA算法的认识。

下载网络课程设计word格式文档
下载网络课程设计.doc
将本文档下载到自己电脑,方便修改和收藏。
点此处下载文档

文档为doc格式

    热门文章
      整站推荐
        点击下载本文