intval=(int)md5Bytes[i]&0xff;
if(val<16)hexValue.append("0");
hexValue.append(Integer.toHexString(val));
}
returnhexValue.toString();
}
publicstaticvoidmain(String[]args){
Filef=newFile("D:
"+File.separator+"test.txt");
//System.out.println(f.getName());
getFileStrs=newgetFileStr();
MD5md5=newMD5(s.getStr(f));
StringpostString=pute();
System.out.println("加密后的内容:
\n"+postString);
}
}
//获取文件内容的class
classgetFileStr{
publicStringgetStr(Filef){
Stringtemp="";
try{
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("原文内容:
\n"+temp);
}
returntemp;
}catch(Exceptione){
returntemp;
}
}
}
运行结果:
实验结论:
掌握了MD5对文件中的内容进行加密的过程。
实验四 数字签名的实现
实验名称
数字签名的生成和管理
实验目的
2.1了解数字签名的基本原理
2.2了解数字签名的基本知识:
消息摘要和公钥密钥体制。
2.3 利用java平台实现数字签名
实验要求
3.1了解数字签名基本原理及其在安全体系中的作用
3.2对密钥进行数字签名。
实验步骤:
importjava.security.*;
publicclassDigitialSignature{
/**
*@paramargs
*@authorhuangbingxin
*/
publicstaticvoidmain(String[]args){
Stringmsg="huangbingxin编写的数字签名";
System.out.println("原文是:
\n"+msg);
bytemsgBytes[]=msg.getBytes();
KeyPairkey=null;
Signaturesig=null;
byte[]signatureBytes=null;
//形成RSA密钥对
try{
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("签名是:
\n"+signature);
}catch(Exceptione){
e.printStackTrace();
}
//使用公钥验证
PublicKeypublicKey=key.getPublic();
try{
sig.initVerify(publicKey);
//对msgBytes重新实施签名
sig.update(msgBytes);
if(sig.verify(signatureBytes)){
System.out.print("签名成功!
");
}else{
System.out.print("签名不成功!
");
}
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
运行结果:
实验结论:
掌握了利用RSA和SHA实施数字签名的方法.
实验五:
非对称密钥
实验名称:
非对称密钥
实验目的:
1了解非对称密钥基本原理;
2掌握运用java平台实现非对称加密的相关的类和使用
实验要求:
1了解非对称加密体制的基本原理;
2了解RSA算法,并运行此算法实现对字符串的加解密。
实验步骤:
非对称密钥是用公钥加密,私钥解密。
现以字符串“Ihaveafriend!
”为例,介绍RSA算法的加、解密。
这里用文件rsapbkey.dat保存公钥,文件rsapvkey.dat保存私钥。
1)、原代码如下:
importjava.io.*;
importjava.math.*;
importjava.security.interfaces.*;
/**
*@authorhuangbingxin
*/
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);
*/
publicstaticvoidmain(String[]args){
Strings="HolleWorld!
";
/*
*加密过程
*/
try{
FileInputStreamfos=newFileInputStream("rsapbkey.dat");//保存公钥
ObjectInputStreamoos=newObjectInputStream(fos);//声明一个流文件
RSAPublicKeypbk=(RSAPublicKey)oos.readObject();//得到RAS公钥描述结构类
BigIntegere=pbk.getPublicExponent();//得到公钥
BigIntegern=pbk.getModulus();//得到公共模
System.out.println("e="+e);
System.out.println("n="+n);
bytebb[]=s.getBytes("UTF8");
BigIntegerm=newBigInteger(bb);
BigIntegerc=m.modPow(e,n);//加密
System.out.println("c="+c);
Stringcs=c.toString();
BufferedWriterout=newBufferedWriter(newOutputStreamWriter(newFileOutputStream("rsapbkey.dat")));
out.write(cs,0,cs.length());
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
//解密过程
try{
BufferedReaderin=newBufferedReader(newInputStreamReader(newFileInputStream("rsapvkey.dat")));
Stringctext=in.readLine();
BigIntegerc=newBigInteger(ctext);
FileInputStreamfi=newFileInputStream("rsapbkey.dat");
ObjectInputStreamoos2=newObjectInputStream(fi);
RSAPrivateCrtKeypck=(RSAPrivateCrtKey)oos2.readObject();
BigIntegerd=pck.getPrivateExponent();
BigIntegern=pck.getModulus();
System.out.println("d="+d);
System.out.println("n="+n);
BigIntegerm=c.modPow(d,n);
System.out.println("m="+m);
byte[]mt=m.toByteArray();
System.out.println("PlainTextis");
for(inti=0;iSystem.out.print(mt[i]);
}
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
结果:
实验结论:
掌握对用java实现RSA算法的加、解密操作。
实验六:
Windows口令破解
实验名称:
Windows口令破解
实验目的:
1.了解Windows口令破解原理
2.能够运用工具实现口令破解;
实验原理:
一.口令破解方法
口令破解主要有两种方法:
字典破解和暴力破解。
字典破解是指通过破解者对管理员的了解,猜测其可能使用某些信息作为密码,例如其姓名、生日、电话号码等,同时结合对密码长