网络安全技术实验报告.docx
- 文档编号:4284735
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:14
- 大小:820.60KB
网络安全技术实验报告.docx
《网络安全技术实验报告.docx》由会员分享,可在线阅读,更多相关《网络安全技术实验报告.docx(14页珍藏版)》请在冰豆网上搜索。
网络安全技术实验报告
中南林业科技大学
实验报告
课程名称:
计算机网络安全技术
专业班级:
2014级计算机科学与技术2班
**********
学号:
********
2017.10.24
实验一java安全机制和数字证书的管理
一实验名称
java安全机制和数字证书的管理
二实验目的
2.1了解java的安全机制的架构和相关的知识;
2.2利用java环境掌握数字证书的管理
三实验内容
3.1java安全机制(JVM,沙袋,安全验证码)。
3.2java的安全机制的架构
1.java加密体系结构(JCA,JavaCryptographyArchitecture)构成JCA的类和接口:
Java.SeCuritv:
定义即插即用服务提供者实现功能扩充的框架与加解密功能调用API的核心类和接口组。
Java.SeCuritv.Cert:
一组证书管理类和接口。
Java.security.interfaces:
一组封装DSA与RSA的公开和私有密钥的接口。
Java.SeCurity.SpeC:
描述公开和私有密钥算法与参数指定的类和接口。
用JCA提供的基本加密功能接口可以开发实现含消息摘要、数字签名、密钥生成、密钥转换、密钥库管理、证书管理和使用等功能的应用程序。
2.Java加密扩展(JCE,JavaCryptographyExtension)构成JCE的类和接口:
Javax.cryt:
提供对基本的标准加密算法的实现,包括DEs,三重DEs(TripleDEs),基于口令(PasswordBasedEncryptionstandard)的DES,Blowfish。
Javax.crypto.interfaces:
支持Diffie一Hell-man密钥。
Javax.cryPto.spec:
定义密钥规范与算法参数规范。
3.Java安全套接扩展(JSSE,JavaSecureSocket1Extension)JSSE提供了实现SSL通信的标准JavaAPI。
JSSEvl.o结构包括下列包:
.J.SSI:
包含JSSEAPI的一组核心类和接口。
.J:
支持基本客户机套接与服务器套接工厂功能所必需的。
.Javax.SeCuritv.Cert:
支持基本证书管理功能所必需的。
目前JSSE的最新版本JCEI.0.2可以在:
httP:
//jaVa·sun·com/security/中下载。
3.3数字证书的生成和管理
1.了解公钥加密体制(非对称密码体制的基本原理)。
2..理解数字证书的基本概念及其在安全体制中的应用。
3.理解密钥的生成和管理。
4.掌握利用keytool工具实现数字证书的管理
四实验结果和分析
4.1命令输入
1.证书的显示
keytool-genkey-aliasmyca-keyalgRSA-keysize1024-keystoremystore-validity4000
(密钥的生成和存储)
2.显示证书的详细信息
keytool-list-v-keystoremystore
3.将证书导出到证书文件
keytool-export-aliasmyca-keystoremycalib-filemy.crt
把证书库mystore中的别名为mycaa的证书导出到my.crt证书文件中,它包含证书主体的信息及证书的公钥,不包括私钥,可以公开。
4.2分析
1、密钥表示
Java用Java.Security.Key接口表示密钥。
Key接口由Java.security包的privateKey与publicKey接口和javax.c巧pto包(属于JCE)中的SecretKey接口扩展。
privateKey与publicKey表示公开密钥算法的的私有与公开密钥,SecretKey表示对称密钥。
每个Key对象与惟一算法相关联,用Key接口中的getAlgorithmO可以知道密钥对应的算法名。
2、密钥管理和数字证书密钥库(KeyStore)是存放私有密钥.公开密钥与证书的容器。
Java平台自带有专属的安全
密钥库,称为Java密钥库(JKS,JavaKeyStore)。
存放在密钥库中可能有两种项目:
①密钥项目一一保存私有密钥/公开密钥对,公开密钥存放在X.5O9格式的专用证书中。
②信任证书项目一一保存包含另一方公开密钥的X.509证书。
一个密钥库可以存放多个密钥项目和多个信任证书项目,密钥库中每个项目与唯一别名
(alias)关联。
Java对密钥库和密钥项目提供用口令(加密)保护。
Java平台提供的keytool程序可以从命令行管理密钥库。
用以下命令可以生成银行和客户的私有密钥/公开密钥对:
keytool-genkey-keystore
在执行命令时keytool会提示输入一些个人信息,用于生成专用证书的主题
(Subject),主题包含了一些证书持有人的信息。
本文提出的方案,
客户证书用其中CN域保存支付帐号。
用keytool-export-keystore
可以把信任证书发放给信息的接收方。
在应用程序中,使用java.security.Keystore类访问和管理密钥库,Keystore类可以读取密钥库中的密钥和证书信息。
Keystore类是个抽象类,由加密服务提供者(CsP)特定实现方法实现。
Keystore对象实例用静态方法getlnstance(stringtype)生成。
tyPe为密钥库类型,Java平台默认密钥库类型为JKS。
生成Keystore对象后,用load(Inputstreamstream,char[]password)从指定输入流装入Keystore对象,口令Password用于验证密钥库数据完整性。
用getKey(Stringalias,charllpassword)返回别名为alias的密钥项目,password是密钥的解密口令。
用getCertificate(Stringalias)返回别名为alias的证书项目,getCertificate返回一java.security.cert.Cer-tificate对象,Certificate对象用getpublicKeyo可以读出证书中的公开密钥。
五小结
数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式,其作用类似于司机的驾驶执照或日常生活中的身份证。
它是由一个由权威机构——CA机构,又称为证书授权(CertificateAuthority)中心发行的,人们可以在网上用它来识别对方的身份。
数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。
最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。
数字证书还有一个重要的特征就是只在特定的时间段内有效。
实验二对称密码加密算法的实现
一实验名称
对称加密算法的实现
二实验目的
2.1了解密码体制基本原理;
2.2掌握运用java平台实现对称加密的相关的类和使用方法;
三实验内容
3.1了解对称加密体制的基本原理;
3.2了解加密体制中密钥的随机生成的实现方法和重要性;3.3了解DESEDE算法,并运行此算法实现对字符串的加解密。
四实验结果和分析
4.1说明
duichenjiami程序将创建一个DESEDE密钥,用它来加密一个字符串,然后对加密的字符串进行解密,最后把密方文和明文一起显示在屏幕上。
由于每次执行时所采用的密钥是不同的,每一次运行所产生的密钥都不一样。
4.2实验代码
SimpleExample.java
importjava.security.*;importjavax.crypto.*;
/**
SimpleExample.java
*
ThisclasscreatesaTripleDESkey,encryptssometext,
printstheciphertext,thendecryptsthetextand*printsthat.
*
ItrequiresaJCE-compliantTripleDESengine,likeCryptix'JCE.
*/publicclassSimpleExample
{publicstaticvoidmain(String[]args)throwsException
{if(args.length!
=1){
System.err.println("Usage:
javaSimpleExampletext");System.exit
(1);}
Stringtext=args[0];
System.out.println("GeneratingaTripleDESkey...");
//CreateaTripleDESkey
KeyGeneratorkeyGenerator=KeyGenerator.getInstance("TripleDES");keyGenerator.init(168);//needtoinitializewiththekeysizeKeykey=keyGenerator.generateKey();
System.out.println("Donegeneratingthekey.");
//Createacipherusingthatkeytoinitializeit
Ciphercipher=Cipher.getInstance("TripleDES/ECB/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE,key);
byte[]plaintext=text.getBytes("UTF8");
//PrintoutthebytesoftheplaintextSystem.out.println("\nPlaintext:
");for(inti=0;i System.out.print(plaintext[i]+""); } //Performtheactualencryptionbyte[]ciphertext=cipher.doFinal(plaintext); //Printouttheciphertext System.out.println("\n\nCiphertext: ");for(inti=0;i System.out.print(ciphertext[i]+""); } //Re-initializetheciphertodecryptmodecipher.init(Cipher.DECRYPT_MODE,key); //Performthedecryption byte[]decryptedText=cipher.doFinal(ciphertext);Stringoutput=newString(decryptedText,"UTF8"); System.out.println("\n\nDecryptedtext: "+output); }} duichenjiami.javaimportjava.security.*;importjavax.crypto.*; /** *duichenjiami.java * *ThisclasscreatesaTripleDESkey,encryptssometext,*printstheciphertext,thendecryptsthetextand*printsthat. * *ItrequiresaJCE-compliantTripleDESengine,likeCryptix'JCE. */publicclassduichenjiami {publicstaticvoidmain(String[]args)throwsException {if(args.length! =1){ System.err.println("Usage: javaduichenjiamitext");System.exit (1);} Stringtext=args[0]; System.out.println("GeneratingaTripleDESkey..."); //CreateaTripleDESkey KeyGeneratorkeyGenerator=KeyGenerator.getInstance("TripleDES");keyGenerator.init(168);//needtoinitializewiththekeysizeKeykey=keyGenerator.generateKey(); System.out.println("Donegeneratingthekey."); //Createacipherusingthatkeytoinitializeit Ciphercipher=Cipher.getInstance("TripleDES/ECB/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE,key);byte[]plaintext=text.getBytes("UTF8"); //PrintoutthebytesoftheplaintextSystem.out.println("\nPlaintext: ");for(inti=0;i System.out.print(plaintext[i]+""); } //Performtheactualencryptionbyte[]ciphertext=cipher.doFinal(plaintext); //PrintouttheciphertextSystem.out.println("\n\nCiphertext: ");for(inti=0;i System.out.print(ciphertext[i]+""); } //Re-initializetheciphertodecryptmodecipher.init(Cipher.DECRYPT_MODE,key); //Performthedecryption byte[]decryptedText=cipher.doFinal(ciphertext); Stringoutput=newString(decryptedText,"UTF8"); System.out.println("\n\nDecryptedtext: "+output);} } 4.3实验结果 五小结 对称加密算法是应用较早的加密算法,技术成熟。 在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。 收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。 在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。 实验三非对称密钥 一实验名称 非对称密钥 二实验目的 2.1了解非对称密钥基本原理; 2.2掌握运用java平台实现非对称加密的相关的类和使用方法; 三实验内容 3.1了解非对称加密体制的基本原理; 3.2了解RSA算法,并运行此算法实现对字符串的加解密。 说明: 非对称密钥是用公钥加密,私钥解密。 现以字符串为例,介绍RSA算法的加、解密。 这里用文件rsapbkey.dat保存公钥,文件rsapvkey.dat保存私钥。 四实验结果和分析 4.1实验代码 EncryptData.javaimportjava.io.*;importjava.math.*;importjava.security.*;importjava.security.interfaces.*;publicclassEncryptData {publicstaticvoidmain(String[]args)throwsException { //创建一个密钥生成器对象,选择加密算法“RSA” KeyPairGeneratorkeygen=KeyPairGenerator.getInstance("RSA"); //初始化对象生成器,RSA密钥长度510-2048 keygen.initialize(1024); //生成密钥对 KeyPairkp=keygen.genKeyPair(); //获得公钥 PublicKeypbk=kp.getPublic(); //获得私钥 PrivateKeypvk=kp.getPrivate(); //建立文件rsapbkey.dat输出流,保存公钥 FileOutputStreamfout=newFileOutputStream("rsapbkey.dat"); //建立文件对象输出流 ObjectOutputStreamoout=newObjectOutputStream(fout); //向文件rsapbkey.dat输出对象obj oout.writeObject(pbk); //建立文件rsapvkey.dat输出流,保存私钥 FileOutputStreamfoutv=newFileOutputStream("rsapvkey.dat"); //建立文件对象输出流 ObjectOutputStreamooutb=newObjectOutputStream(foutv); //向文件rsapvkey.dat输出对象pvk ooutb.writeObject(pvk); //获得公钥,计算指数e和模数n(memodn) RSAPublicKeyrsapbk=(RSAPublicKey)kp.getPublic(); BigIntegere=rsapbk.getPublicExponent(); BigIntegern=rsapbk.getModulus(); //明文字符串 Stringptext="Mynameissunxiaoyang! ";byte[]pb=ptext.getBytes("UTF8");BigIntegerm=newBigInteger(pb); //执行计算,即加密(memodn),返回密文 BigIntegerbi=m.modPow(e,n); //显示密文 System.out.println("bi="+bi); //获取私钥参数及解密 RSAPrivateKeyrsapvk=(RSAPrivateKey)kp.getPrivate(); BigIntegernv=rsapvk.getModulus(); BigIntegerdv=rsapvk.getPrivateExponent(); BigIntegermv=rsapvk.getModulus(); //执行计算,即解密 BigIntegermm=bi.modPow(dv,mv); //显示明文 byte[]mt=mm.toByteArray(); for(inti=0;i } 4.2实验结果 五小结 非对称密码体制的特点: 算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。 对称密码体制中只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。 所以保证其安全性就是保证密钥的安全,而非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了。 这样安全性就大了很多。 实验四数字签名的实现 一实验名称 数字签名的生成和管理 二实验目的 2.1了解数字签名的基本原理 2.2了解数字签名的基本知识: 消息摘要和公钥密钥体制。 2.3利用java平台实现数字签名 三实验内容 3.1了解数字签名基本原理及其在安全体系中的作用 3.2对密钥进行数字签名。 四实验结果和分析 4.1实验代码 SignatureExample.javaimportjava.security.Signature;importjava.security.SignatureException;importjava.security.KeyPair;importjava.security.KeyPairGenerator;importsun.misc.*; /** *SignatureExample * *Simpleexampleofusingadigitalsignature. *ThisclasscreatesanRSAkeypairandthensignsthetext *ofthefirstargumentpassedtoit.Itdisplaysthesignature*inBASE64,andthenverifiesthesignaturewiththecorresponding*publickey. */publicclassSignatureExample{publicstaticvoidmain(String[]args)throwsException{ if(args.length! =1){ System.err.println("Usage: javaSignatureExample\"I'mSunxyang,andtexttobesigned\""); System.exi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络安全 技术 实验 报告