计算机网络安全实验报告林科大版Word文档格式.docx
《计算机网络安全实验报告林科大版Word文档格式.docx》由会员分享,可在线阅读,更多相关《计算机网络安全实验报告林科大版Word文档格式.docx(25页珍藏版)》请在冰豆网上搜索。
实验目的12
实验要求12
12
运行结果:
13
实验五:
非对称密钥14
14
16
实验六:
Windows口令破解17
17
实验原理:
18
19
实验七网络嗅探20
实验目的20
实验原理20
java安全机制和数字证书的管理
1了解java的安全机制的架构和相关的知识;
2利用java环境掌握数字证书的管理实验原理:
1java安全机制(JVM,沙袋,安全验证码)。
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:
支持基本证书管理功能所必需的。
3、数字证书的生成和管理
(1)、输入:
keytool-genkey-aliaszy-keyalgDSA-keystorezhang
按提示分别输入:
密码,用户名,地区市,省地区,国家区域号。
最后输入:
y保存。
结果如下:
(2)、查看信息:
>
keytool-list-v-keystorezhang
显示结果:
(3)将密钥保存到123.cer文件中:
keytool-export-aliaszy-keystorezhang-file123.cer
(4)、打开当前文件夹中123.cer文件。
显示如下:
生成的cer文件打开不了。
解决方法:
换台机器
1、了解java安全机制和数字证书的生成及管理工作。
2、掌握了keytool工具的使用。
1、进一步了解keytool工具的使用。
2、如何利用java语言去调用生成的数字证书?
实验二 对称密码加密算法的实现
对称加密算法的实现
1、了解密码体制基本原理;
2、掌握运用java平台实现对称加密的相关的类和使用方法;
1、了解对称加密体制的基本原理;
2、了解加密体制中密钥的随机生成的实现方法和重要性;
3、了解DESEDE算法,并运行此算法实现对字符串的加解密。
1、利用KeyGenerator类中的getInstance方法生成一个指定算法的(对称)密钥,具体方法:
importjava.security.InvalidKeyException;
importjava.security.Key;
importjava.security.NoSuchAlgorithmException;
importjavax.crypto.Cipher;
importjavax.crypto.KeyGenerator;
importjavax.crypto.NoSuchPaddingException;
publicclassSimpleExample{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
try{
KeyGeneratorkeyGenerator=KeyGenerator.getInstance("
TripleDES"
);
//生成一个TripleDES算法的密钥
keyGenerator.init(112);
//指定密钥的长度为128
Keykey=keyGenerator.generateKey();
//初始化一个Key对象,获取keyGenerator生成的的密钥;
Ciphercipher=Cipher.getInstance("
TripleDES/ECB/PKCS5Padding"
//生成一个实现DES和ECB转换的Cipher对象。
cipher.init(Cipher.ENCRYPT_MODE,key);
//用于将cipher初始化为解密模式的常量。
Stringtext="
23464968732855466"
;
byte[]plaintext=text.getBytes("
UTF8"
//编码方式的转换;
//输出明文
System.out.println("
\nPlaintext:
"
for(inti=0;
i<
plaintext.length;
i++){
System.out.print(plaintext[i]+"
}
//输出密文
byte[]ciphertext=cipher.doFinal(plaintext);
//Printouttheciphertext
\n\nCiphertext:
ciphertext.length;
System.out.print(ciphertext[i]+"
//对cipher进行初始化为加密模式
cipher.init(Cipher.DECRYPT_MODE,key);
//Performthedecryption
byte[]decryptedText=cipher.doFinal(ciphertext);
Stringoutput=newString(decryptedText,"
\n\nDecryptedtext:
+output);
}catch(NoSuchAlgorithmExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(NoSuchPaddingExceptione){
}catch(InvalidKeyExceptione){
}catch(Exceptione){
}
}
}
2、text文本的内容不同,产生的密码!
显示内容如下:
1、了解keyGenerator、Cipher类的使用,具体掌握getInstance()、doFinal()方法等。
2、进一步学习Package:
java.security中其它关于生密钥的方法。
实验三 消息摘要的生成和管理
实验名称
消息摘要的生成和管理
实验目的
2.1了解消息摘要的基本原理
2.2利用java平台对文件生成消息摘要
实验要求
3.1了解消息摘要的基本原理及其在安全体系中的作用
3.2了解Hash函数及其重要性
3.3 采用MD5算法对文件生成消息摘要。
importjava.io.*;
importjava.security.*;
importjava.util.*;
publicclassMD5{
privateStringinStr;
privateMessageDigestmd5;
privateMD5(StringinStr){
this.inStr=inStr;
try{
this.md5=MessageDigest.getInstance("
MD5"
System.out.println(e.toString());
publicStringcompute(){
char[]charArray=this.inStr.toCharArray();
byte[]byteArray=newbyte[charArray.length];
for(inti=0;
i<
charArray.length;
i++){
byteArray[i]=(byte)charArray[i];
byte[]md5Bytes=this.md5.digest(byteArray);
StringBufferhexValue=newStringBuffer();
md5Bytes.length;
intval=(int)md5Bytes[i]&
0xff;
if(val<
16)hexValue.append("
0"
hexValue.append(Integer.toHexString(val));
returnhexValue.toString();
Filef=newFile("
D:
"
+File.separator+"
test.txt"
//System.out.println(f.getName());
getFileStrs=newgetFileStr();
MD5md5=newMD5(s.getStr(f));
StringpostString=pute();
加密后的内容:
\n"
+postString);
//获取文件内容的class
classgetFileStr{
publicStringgetStr(Filef){
Stringtemp="
FileInputStreamin=newFileInputStream(f);
BufferedInputStreambis=newBufferedInputStream(in);
bytec[]=newbyte[64];
intn=0;
while((n=bis.read(c))!
=-1){
temp=newString(c,0,n);
System.out.println("
原文内容:
+temp);
returntemp;
}catch(Exceptione){
掌握了MD5对文件中的内容进行加密的过程。
实验四 数字签名的实现
数字签名的生成和管理
2.1了解数字签名的基本原理
2.2了解数字签名的基本知识:
消息摘要和公钥密钥体制。
2.3 利用java平台实现数字签名
3.1了解数字签名基本原理及其在安全体系中的作用
3.2对密钥进行数字签名。
publicclassDigitialSignature{
*@authorhuangbingxin
Stringmsg="
huangbingxin编写的数字签名"
原文是:
+msg);
bytemsgBytes[]=msg.getBytes();
KeyPairkey=null;
Signaturesig=null;
byte[]signatureBytes=null;
//形成RSA密钥对
KeyPairGeneratorkeyGen=KeyPairGenerator.getInstance("
RSA"
keyGen.initialize(1024);
//生成公钥和私钥对
key=keyGen.generateKeyPair();
//实例化Signature,用于产生数字签名,指定RSA和SHA算法
sig=Signature.getInstance("
SHA1WithRSA"
//得到私钥
PrivateKeyprivateKey=key.getPrivate();
//用私钥来初始化数字签名对象
sig.initSign(privateKey);
//对msgBytes实施签名
sig.update(msgBytes);
signatureBytes=sig.sign();
Stringsignature=newString(signatureBytes);
System.out.println("
签名是:
+signature);
//使用公钥验证
PublicKeypublicKey=key.getPublic();
sig.initVerify(publicKey);
//对msgBytes重新实施签名
if(sig.verify(signatureBytes)){
System.out.print("
签名成功!
}else{
签名不成功!
}
掌握了利用RSA和SHA实施数字签名的方法.
非对称密钥
1了解非对称密钥基本原理;
2掌握运用java平台实现非对称加密的相关的类和使用
1了解非对称加密体制的基本原理;
2了解RSA算法,并运行此算法实现对字符串的加解密。
非对称密钥是用公钥加密,私钥解密。
现以字符串“Ihaveafriend!
”为例,介绍RSA算法的加、解密。
这里用文件rsapbkey.dat保存公钥,文件rsapvkey.dat保存私钥。
1)、原代码如下:
importjava.math.*;
importjava.security.interfaces.*;
/**
publicclassEncryptData{
*功能:
用JAVA实现RSA算法加密、解密的原理和过程
*算法描述:
m:
明文;
c:
密文;
p,q:
*两个大素数n=p*q;
FI(n)=(p-1)(q-1);
*加密密钥(私钥):
e;
*解密密钥(公钥):
d;
*d*e=1modFI(n)
*加密过程:
*c=m^e(modn);
解密过程:
m=c^d(modn);
Strings="
HolleWorld!
/*
*加密过程
*/
FileInputStreamfos=newFileInputStream("
rsapbkey.dat"
//保存公钥
ObjectInputStreamoos=newObjectInputStream(fos);
//声明一个流文件
RSAPublicKeypbk=(RSAPublicKey)oos.readObject();
//得到RAS公钥描述结构类
BigIntegere=pbk.getPublicExponent();
//得到公钥
BigIntegern=pbk.getModulus();
//得到公共模
e="
+e);
n="
+n);
bytebb[]=s.getBytes("
BigIntegerm=newBigInteger(bb);
BigIntegerc=m.modPow(e,n);
//加密
c="
+c);
Stringcs=c.toString();
BufferedWriterout=newBufferedWriter(newOutputStreamWriter(newFileOutputStream("
)));
out.write(cs,0,cs.length());
//解密过程
BufferedReaderin=newBufferedReader(newInputStreamReader(newFileInputStream("
rsapvkey.dat"
Stringctext=in.readLine();
BigIntegerc=newBigInteger(ctext);
FileInputStreamfi=newFileInputStream("
ObjectInputStreamoos2=newObjectInputStream(fi);
RSAPrivateCrtKeypck=(RSAPrivateCrtKey)oos2.readObject();
BigIntegerd=pck.getPrivateExponent();
BigIntegern=pck.getModulus();
d="
+d);
BigIntegerm=c.modPow(d,n);
m="
+m);
byte[]mt=m.toByteArray();
PlainTextis"
for(inti=0;
mt.length;
i++){
System.out.print(mt[i]);
结果:
掌握对用java实现RSA算法的加、解密操作。
Windows口令破解
1.了解Windows口令破解原理
2.能够运用工具实现口令破解;
一.口令破解方法
口令破解主要有两种方法:
字典破解和暴力破解。
字典破解是指通过破解者对管理员的了解,猜测其可能使用某些信息作为密码,例如其姓名、生日、电话号码等,同时结合对密码长