版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、信息与网络安全实验报告一、实验名称设计数字签名二、实验目的理解数字签名,学会设计数字签名三、实验原理1:调用.NET2.0的MAKECERT创建含有私钥的数字证书,并存储到个人证书区;2:将该证书导出为pfx文件,并为其指定一个用来打开pfx文件的password;3:读取pfx文件,导出pfx中公钥和私钥;4:用pfx证书中的公钥进行数据的加密,用私钥进行数据的解密。四 、签名算法:using System;using System.Text;using System.Security.Cryptography;namespace DigitalSignature /信息和签名的封包 pub
2、lic struct DS public byte data; public byte signature; class Program static DSACryptoServiceProvider dsa = new DSACryptoServiceProvider(); /创建了公钥和私钥对 /创建数字签名 DS CreateSignature(string strData) SHA1Managed sha1 = new SHA1Managed(); SHA1Managed sha1 = new SHA1Managed(); DSASignatureFormatter sigFormat
3、ter = new DSASignatureFormatter(dsa); byte data_Bytes = Encoding.ASCII.GetBytes(strData); byte hash_Bytes = sha1.ComputeHash(data_Bytes); sigFormatter.SetHashAlgorithm("SHA1"); byte signedHash = sigFormatter.CreateSignature(hash_Bytes); DS ds = new DS(); ds.data = hash_Bytes; ds.signature
4、= signedHash; return ds; /验证数字签名 bool VerifySignature(DS ds) byte remote_HashedValue = ds.data; byte remote_SignedHash = ds.signature; DSASignatureDeformatter sigDeformatter = new DSASignatureDeformatter(dsa); sigDeformatter.SetHashAlgorithm("SHA1"); if (sigDeformatter.VerifySignature(remo
5、te_HashedValue, remote_SignedHash) return true; return false; static void Main(string args) string strMsg = "JGLRIEHDKVJFLHGJGYRKPYEVCNADWQKGLBUFOWDT" /报文文本 DS ds = new DS(); Program prog = new Program(); ds = prog.CreateSignature(strMsg); /模拟签名在传输途中遭到破坏或修改 /. /ds.signature = new byte40; i
6、f (prog.VerifySignature(ds) /验证通过 Console.WriteLine("The signature used to sign the hash has been verified."); else /验证未通过 Console.WriteLine("The signature used to sign the hash doesn't match the hash."); Console.ReadLine(); 五、对数字签名算法的理解数字签名是非对称密钥加密技术与数字摘要技术的应用。数字签名有两种功效:一是能确
7、定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名。二是数字签名能确定消息的完整性。因为数字签名的特点是它代表了文件的特征,文件如果发生改变,数字签名的值也将发生变化。不同的文件将得到不同的数字签名。 一次数字签名涉及到一个哈希函数、发送者的公钥、发送者的私钥。”一 、实验名称PGP算法二、 实验目的了解PGP的工作原理,掌握PGP算法的使用三、 实验原理1. 发送方创建消息2. 发送方生成消息的160位的散列码3. 用发送方私钥对散列进行RSA加密,加到消息上4. 传输数据5. 接收方用发送方的公钥对加密部分进行RSA解密6. 接收方将剩余数据生成160位散列码7. 生成散列与
8、解密散列进行比较,如果匹配,则认证成功四 源程序 :import java.io.*;import java.security.*;import java.lang.reflect.*;import javax.crypto.*;import javax.crypto.spec.*;public class DecryptStart extends ClassLoader / 这些对象在构造函数中设置, / 以后loadClass()方法将利用它们解密类 private SecretKey key; private Cipher cipher; / 构造函数:设置解密所需要的对象 public
9、 DecryptStart( SecretKey key ) throws GeneralSecurityException, IOException this.key = key; String algorithm = "DES" SecureRandom sr = new SecureRandom(); System.err.println( "DecryptStart: creating cipher" ); cipher = Cipher.getInstance( algorithm ); cipher.init( Cipher.DECRYPT_
10、MODE, key, sr ); / main过程:我们要在这里读入密匙,创建DecryptStart的 / 实例,它就是我们的定制ClassLoader。 / 设置好ClassLoader以后,我们用它装入应用实例, / 最后,我们通过Java Reflection API调用应用实例的main方法 static public void main( String args ) throws Exception String keyFilename = args0; String appName = args1; / 这些是传递给应用本身的参数 String realArgs = new St
11、ringargs.length-2; System.arraycopy( args, 2, realArgs, 0, args.length-2 ); / 读取密匙 System.err.println( "DecryptStart: reading key" ); byte rawKey = Util.readFile( keyFilename ); DESKeySpec dks = new DESKeySpec( rawKey ); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance( "DES
12、" ); SecretKey key = keyFactory.generateSecret( dks ); / 创建解密的ClassLoader DecryptStart dr = new DecryptStart( key ); / 创建应用主类的一个实例 / 通过ClassLoader装入它 System.err.println( "DecryptStart: loading "+appName+"" ); Class clasz = dr.loadClass( appName ); / 最后,通过Reflection API调用应用实例
13、 / 的main()方法 / 获取一个对main()的引用 String proto = new String1; Class mainArgs = (new String1).getClass() ; Method main = clasz.getMethod( "main", mainArgs ); / 创建一个包含main()方法参数的数组 Object argsArray = realArgs ; System.err.println( "DecryptStart: running "+appName+".main()" );
14、 / 调用main() main.invoke( null, argsArray ); public Class loadClass( String name, boolean resolve ) throws ClassNotFoundException try / 我们要创建的Class对象 Class clasz = null; / 必需的步骤1:如果类已经在系统缓冲之中 / 我们不必再次装入它 clasz = findLoadedClass( name ); if (clasz != null) return clasz; / 下面是定制部分 try / 读取经过加密的类文件 byte
15、 classData = Util.readFile( name+".class" ); if (classData != null) / 解密. byte decryptedClassData = cipher.doFinal( classData ); / . 再把它转换成一个类 clasz = defineClass( name, decryptedClassData, 0, decryptedClassData.length ); System.err.println( "DecryptStart: decrypting class "+name
16、+"" ); catch( FileNotFoundException fnfe ) / 必需的步骤2:如果上面没有成功 / 我们尝试用默认的ClassLoader装入它 if (clasz = null) clasz = findSystemClass( name ); / 必需的步骤3:如有必要,则装入相关的类 if (resolve && clasz != null) resolveClass( clasz ); / 把类返回给调用者 return clasz; catch( IOException ie ) throw new ClassNotFoundException( ie.toString(); catch( GeneralSecurityExc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 外企外包合同范例
- 代理立项合同范例
- 按揭房合同抵押合同范例
- 天津滨海汽车工程职业学院《编织首饰工艺》2023-2024学年第一学期期末试卷
- 煤矿出售转让合同范例
- 农田占用合同范例
- 商铺面出租合同范例
- 法律人员合同范例
- 广东省深圳市八年级生物上册 20.5遗传与环境教学思路 (新版)北师大版
- 瑜伽合作合同范例
- 报考中级会计的从事会计工作年限证明模板
- 东方电影学习通超星期末考试答案章节答案2024年
- 2024年-2025年公路养护工理论知识考试题及答案
- (完整)注册安全工程师考试题库(含答案)
- 数控类论文开题报告
- 2024秋期国家开放大学《可编程控制器应用实训》一平台在线形考(形成任务7)试题及答案
- 2024内蒙古文物考古研究所招聘历年高频500题难、易错点模拟试题附带答案详解
- 国家开放大学《创建小企业》形考任务1-4参考答案
- 农村安全饮水工程项目划分表
- 苏教版七年级历史知识点
- 陕西省既有村镇住宅抗震加固技术规程
评论
0/150
提交评论