已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
信息安全专业综合实践设计报告专业: 信息安全 班级: 小组成员: 指导教师: 职 称: 中国矿业大学计算机科学与技术学院 年 月 徐州设计日期 年 月 日至 年 月 日小组成员在本次设计中承担的任务成绩指导教师签字: 年 月 日前言为了提高学生的动手能力,培养同学们的学习兴趣,同时对所学知识进行全面的复习,特在第7学期开设本课程。信息安全专业综合实践是信息安全专业的集中性实践环节课程。本课程的任务是训练学生综合利用所学理论知识和实践技能解决实际问题,提高学生独立钻研及团队合作能力,为适应今后的工作打下扎实的基础。通过该课程实践,使学生能够利用密码学知识实现通信系统的机密性、完整性;能够评估系统的安全性,能够利用弱点攻破远程系统,能够有效地防御远程攻击;对Web服务、Email服务能够熟练地管理和配置,增强系统的安全性;能够综合利用认证、授权、访问控制设计一个安全、高效的信息系统。本实验报告主要分为四个部分:第一篇,网络通信安全;第二篇,网络攻击;第三篇,系统管理与配置;第四篇,信息系统安全。目录实验一 网络通信安全1.1实验目的1.2实验内容1.3相关知识1.4实验成果1.5实验小结实验二 网络攻防2.1实验目的2.2实验内容2.3实验原理2.4实验步骤2.5实验小结实验三 Web服务器配置3.1实验目的3.2实验要求3.3实验内容3.4实验小结实验四 信息系统安全4.1实验目的4.2实验内容4.3开发环境4.4系统实现 4.5实验小结实验一 网络通信安全1.1实验目的通过本章的学习,使学生掌握密码学在通信安全中的具体应用。基本要求能够实现客户服务器通信,能够使用AES算法实现消息的加密与解密,对优秀的学生要求能够实现数字签名的生成与验证1.2实验内容(1)实现客户服务器之间的通信;(2)发送方传输的消息使用AES加密,接收方对消息解密获取明文;(3)发送方传输的消息使用HMAC处理,接收方验证消息的完整性;(4)发送方对传输的消息使用RSA进行签名,接收方验证数字签名。1.3相关知识1.3.1对称密码AES 1997年美国国家标准和技术委员会NIST宣布征集一个新的对称密钥分组密码算法,以取代DES作为新的加密标准,新的算法被命名为高级加密标准AES。经过角逐,由比利时密码学家Daemen和Rijment共同设计的Rijndael算法成为最后赢家。目前的AES算法是一个迭代型分组密码,其分组长度和密钥长度都可变,各自支持128比特、192比特、256比特。与DES相同,AES也是由最基本的变换单位“轮”多次迭代而成的,当分组长度和密钥分组长度均为128bit时,轮数为N=10。AES的轮(除最后一轮)变换由四个不同的变换组成,这些变化被称之为内部轮函数,可以表示成如下形式:Round(State,RoundKey)SubBytes(State);ShiftRows(State);MixColumns(State);AddRoundKey(State,RoundKey);State表示消息矩阵;RoundKey表示轮密钥矩阵;SubBytes(State)为字节代替变换、ShiftRows(State)为行移位变换、MixColumns(State)为列混合变换、AddRoundKey(State,RoundKey)为与子密钥异或。最后一轮略微不同,将其记为FinalRoundKey(State,RoundKey),相当于前面的Round(State,RoundKey)去掉MixColumns(State)。对于加密来说,输入到第一轮的State就是明文消息矩阵,最后一轮输出的State就是对应的密文消息矩阵。AES的解密变换和加密变换时互逆的,轮函数也分为4层,分别为InvShiftRow(State)逆行移位变换、InvByteSub(State)逆字节代替变换、AddRoundKey(State,RoundKey)与子密钥位异或和InvMixColumn(State)逆列混合变换,可表示为:InvRound(State,RoundKey)InvShiftRow(State);InvByteSub(State);AddRoundKey(State,RoundKey);InvMixColumn(State);明文明文State化RoundKeySubBytes(State)ShiftRows(State)MixColumns(State)AddRoundKey(State,RoundKey)RoundKeySubBytes(State)ShiftRows(State)AddRoundKey(State,RoundKey)RoundKeyAES加密过程1.3.2公钥密码RSARSA公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。算法描述:(1)密钥的产生选择两个保密的大素数p和q;计算n=p*q,(n)=(p-1)(q-1),其中,(n)是n的欧拉函数值;选一整数e,满足1e(n),且gcd(n),e)=1;计算d,满足de=1mod(n),即d是e在模(n)下的乘法逆元;以e,n为公开钥,以d,n为秘密钥。(2)加密加密时首先将明文比特串分组,是的每个分组对应的十进制数小于n,然后对每个明文分组m,做加密运算:c=m mod n。(3)解密对密文分组的解密运算为:m=c mod n。RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。1.4实验成果我们使用JAVA语言完成实验。1.4.1代码分析思路分析:首先完成客户服务器通信模块,然后插入加密模块下面贴出部分代码以供分析发送部分:public class UDPSend extends Frame implements ActionListener/图形界面Panel p1=new Panel();Panel p2=new Panel();TextField textField1=new TextField();Button button1=new Button();Button button2=new Button();public UDPSend()tryjbInit();catch(Exception e)e.printStackTrace();public void actionPerformed(ActionEvent e)Component com=(Component)e.getSource();if(com.equals(button1)sendData();else if(com.equals(button2)System.exit(0);elsesendData();/发送数据void sendData()try/添加DES加密部分String secr=123456789; DESPlus des = new DESPlus(secr);/自定义密钥String msg=textField1.getText();/明文msgif(msg.equals()return;msg=des.encrypt(msg);/msg=crypt(msg);textField1.setText();InetAddress address=InetAddress.getByName();/通信方的IP地址int len=msg.length();bytemessage=new bytelen;msg.getBytes(0, len, message, 0);DatagramPacket packet=new DatagramPacket(message,len,address,9999);DatagramSocket socket=new DatagramSocket();socket.send(packet);catch(Exception e)private void jbInit()throws Exceptionthis.setTitle(发送数据报);button1.setLabel(发送);button2.setLabel(退出);this.add(textField1,BorderLayout.NORTH);this.add(button1,BorderLayout.CENTER);this.add(button2,BorderLayout.SOUTH);button1.addActionListener(this);button2.addActionListener(this);textField1.addActionListener(this);接收部分:public class UDPGet extends Frame implements ActionListenerTextArea textArea1=new TextArea();Button button1=new Button();public UDPGet()tryjbInit();catch(Exception e)e.printStackTrace();void waitForData()trybytebuffer=new byte1024;DatagramPacket packet=new DatagramPacket(buffer,buffer.length);DatagramSocket socket=new DatagramSocket(9999);while(true)socket.receive(packet);String s=new String(buffer,0,0,packet.getLength();String test2=123456789;DESPlus des = new DESPlus(test2);/自定义密钥s=des.decrypt(s);textArea1.append(s+n);packet=new DatagramPacket(buffer,buffer.length);catch(Exception e)private void jbInit()throws Exceptionthis.setTitle(接受数据报);textArea1.setText();button1.setLabel(退出);this.add(textArea1,BorderLayout.CENTER);this.add(button1,BorderLayout.SOUTH);button1.addActionListener(this);public void actionPerformed(ActionEvent e)Component com=(Component)e.getSource();if(com.equals(button1)System.exit(0);加密模块:public class DESPlus private static String strDefaultKey = national; private Cipher encryptCipher = null; private Cipher decryptCipher = null; public static String byteArr2HexStr(byte arrB) throws Exception int iLen = arrB.length; / 每个byte用两个字符才能表示,所以字符串的长度是数组长度的两倍 StringBuffer sb = new StringBuffer(iLen * 2); for (int i = 0; i iLen; i+) int intTmp = arrBi; / 把负数转换为正数 while (intTmp 0) intTmp = intTmp + 256; / 小于0F的数需要在前面补0 if (intTmp 16) sb.append(0); sb.append(Integer.toString(intTmp, 16); return sb.toString(); public static byte hexStr2ByteArr(String strIn) throws Exception byte arrB = strIn.getBytes(); int iLen = arrB.length; / 两个字符表示一个字节,所以字节数组长度是字符串长度除以2 byte arrOut = new byteiLen / 2; for (int i = 0; i Preferences - Java - Compiler - Errors/Warnings - Deprecated and restricted API - Forbidden reference (access rules) - Warnings,或者在项目上修改编译选项。 public DESPlus(String strKey) throws Exception Security.addProvider(new vider.SunJCE(); Key key = getKey(strKey.getBytes(); encryptCipher = Cipher.getInstance(DES); encryptCipher.init(Cipher.ENCRYPT_MODE, key); decryptCipher = Cipher.getInstance(DES); decryptCipher.init(Cipher.DECRYPT_MODE, key); public byte encrypt(byte arrB) throws Exception return encryptCipher.doFinal(arrB); public String encrypt(String strIn) throws Exception return byteArr2HexStr(encrypt(strIn.getBytes(); public byte decrypt(byte arrB) throws Exception return decryptCipher.doFinal(arrB); public String decrypt(String strIn) throws Exception return new String(decrypt(hexStr2ByteArr(strIn); private Key getKey(byte arrBTmp) throws Exception / 创建一个空的8位字节数组(默认值为0) byte arrB = new byte8; / 将原始字节数组转换为8位 for (int i = 0; i arrBTmp.length & i 删除程序-打开或关闭windows功能-internet信息服务里面-FTP服务2、控制面板-系统和安全-管理工具-Internet 信息服务(IIS)管理器-右键点你计算机名称那里,选择添加FTP站点;3、FTP站点名称输入:demo-选择你的FTP目录物理路径,点下一步-Ip地址选“全部未分配”,端口可以自己设,但不能用80,勾上“自动FTP站点”,SSL选“允许”,点下一步-身份验证选“匿名”,允许访问选“匿名用户”,权限勾“读取”,点完成。4.配置FTP站点 5. 测试站点是否正常工作33.3.3帐户管理1、 打开控制面板,用户帐户2、新建一个帐户,配置用户名2、 选择用户类型4、在用户帐户中可以更改用户名称,创建密码,更改账户类型等5、创建用户密码6、查看用户类型7、安全设置:打开控制面板管理工具中的本地安全设置8、配置帐户策略密码策略】9、策略配置10、配置IP安全策略 3.3.4邮件服务器配置1、 启动OUTLook2、 安装SMTP服务器3、 在工具电子邮件帐户中创建帐户4、 选择服务器类型5、EMON设定6、创建邮件3.4实验小结 在本次实验中,对IIS的安装及使用都有了基本的了解,在实现操作系统(Windows/Linux)、Web服务器或应用服务器(IIS/Apache)、邮件服务器(Exchage)的管理与配置过程中,通过自己的操作对他们的配置也有了一定程度的熟悉。实验四 信息系统安全会员系统的设计实现4.1实验目的掌握构建安全信息系统的整个流程4.2实验内容实现一个安全的信息系统,包括用户注册、认证、授权、访问控制等功能。4.3开发环境编译环境:VS2005数据库:SQL20004.4系统实现 见源代码。 4.4.1功能设计1、基于角色的访问控制,会员登陆和管理员登陆2、会员注册,让访问者注册使用此系统3、密码提示,可以让会员找回自己的密码4、为了安全性,对于某些信息加了限制,比如账号、密码不得少于6个字符。4.4.2、数据库设计1、数据表共有三个表:会员表(customer)、管理员表(admin)、城市表(city)会员表和管理员表信息字段相同,创建会员表,管理员表一样。城市表主要有id和name两个字段,存储会员,管理员城市信息。2、存储过程有很多存储过程:注册信息,获取城市信息,验证身份合法性,修改信息,密码提示等。这里主要介绍实现访问控制存储过程,注册信息存储过程、修改信息存储过程。3、访问控制存储过程验证是否是合法的用户和合法的管理员,管理员和会员的验证存储过程的相似,只是从admin表里取字段。这个存储过程实现从数据库读数据和提交给服务器的数据对比,以验证是否是合法的会员或者管理员4.4.3中间层根据前面介绍,系统可以划分为4个模块:登陆,注册,修改,密码提示。要实现这些模块的功能,就需要中间层的支持才能实现。主要有几个类组成,来实现获得数据库连接,获取数据以及实现数据的处理。ConnStr类ConnStr类,实现从Web.config文件中的appSettings的节点中的key=Conn的Value中获得连接数据库的字符串。Web.config文件中的appSettings节点内容如下:SQLDataReaderResult类SQLDataReaderResult类实现了获取一个SqlDataReader,并可以对SqlDataReader进行关闭的功能。MemberDetail类MemberDetail类,描述一个会员应该包含哪些信息。可以理解为将一条会员信息抽象为一个MemberDetail类实例化后的对象。MemberMgr类MemberMgr类,是整个中间层里最重要的类,会员信息的增加、修改和验证,都是在该类成员函数里实现的。1、需要使用的命名空间using System;using System.Data;using System.Data.SqlClient;2、先声明的类里的全局变量ConnStr ConnStr=new ConnStr();SqlCommand mycmd;SqlDataReader Sqldr;3、成员函数protected int RegNMod(int op,ref MemberDetail user)根据条件用注册或修改会员信息。注册会员信息调用了函数库中的“Register”存储过程,会员信息调用了数据库中的“Modify”存储过程。代码略。4、成员函数public int Register(ref MemberDetail user)用于MemberMgr类被实例化以后,对外注册会员信息的方法。5、成员函数public int Modify(ref MemberDetail user)用于MemberMgr类被实例化以后,对外实现修改会员信息的方法。6、成员函数public MemberDetail GetDetailByID(int ID)和GetDetailByPIN(string PIN)根据ID或者PIN帐号获得会员信息。都调用了内部方法GetDetail(int op,object obj)。7、成员函数protected MemberDetail GetDetail(int op,object obj)MeberMgr类内部的方法,根据条件用于获得会员信息。在获得会员信息时,根据ID调用了存储过程“GetDetailByID”,根据PIN帐号调用了存储过程“GetDetailByPIN”。8、成员函数public int IsValidUser(string PIN,string Password)根据会员帐号和密码,验证会员是否是合法用户。9、成员函数public int IsValidMg(string PIN,string
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中考物理复习主题单元4第9课时力与运动课件
- 磴口县三完小三年级手工教案
- 北师大版二年级语文上册教案(高效课堂模式)
- 火力发电电焊施工协议
- 西师版五年级语文下册教案
- 广告创意总监租赁合约
- 社会组织复印机租赁协议
- 财务人员绿色办公倡导承诺书
- 农业科技园区招投标申请表
- 生产线设备故障应对规范
- 招商银行智慧营销体系规划方案((2022年-2023年)-2022)
- 口腔科住院医师考试:2022牙周病学真题模拟及答案
- 慢性伤口的综合处理课件
- 《人民币硬币和普通纪念币》理论考试题库(含答案)
- 卢卡奇教学讲解课件
- 二年级珍惜时间发奋学习主题班会课件
- 平行与垂直(公开课)课件
- 城市轨道交通牵引供电及电力技术分析
- 提高外墙干挂石材施工一次合格率QC成果Word版
- 建筑行业会计基本处理课件
- 三年级上册美术课件-第4课 连环画 ▏人美版 (共15张PPT)
评论
0/150
提交评论