资源简介

AB双方通信,A把需要传输的文件MD5值用自己的私钥生成数字签名,连同明文用B的公钥加密后传送给B,B用私钥解密验证数字签名,并计算明文MD5值跟密文的MD5值比较

资源截图

代码片段和文件信息

package net;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.objectInputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.security.interfaces.RSAPublicKey;

import util.KeyUtils;
import util.MD5Utils;
import util.RSAUtils;
import util.SignUtils;

public class A {

private String info;
private String FILE = “d:/test/test.txt“;
private String KEY_FILE = “d:/test/A/AKey.dat“;
private String SIGN_FILE = “d:/test/A/sign.dat“;
private String RSA_SIGN_FILE = “d:/test/A/rsaSign.dat“;
private String RSA_FILE = “d:/test/A/rsaTest.dat“;
private RSAPublicKey pubKey;

public RSAPublicKey getPubKey() {
return pubKey;
}

public void setPubKey(RSAPublicKey pubKey) {
this.pubKey = pubKey;
}

public String getInfo() {
return info;
}

public void setInfo(String info) {
this.info = info;
}

public void init() {
// 创建目录
File f1 = new File(“d:/test/A/“);
f1.mkdirs();
info = MD5Utils.md5(FILE);
KeyUtils.createPairKey(KEY_FILE);
SignUtils.signInfo(KEY_FILE info SIGN_FILE);
}

public void send() throws Exception {
RSAUtils.encryptToFile(pubKey SIGN_FILE RSA_SIGN_FILE);
RSAUtils.encryptToFile(pubKey FILE RSA_FILE);
}

public void start() throws Exception {

ServerSocket ss = new ServerSocket(520);

Socket socket = ss.accept();

InputStream is = socket.getInputStream();
DataInputStream dis = new DataInputStream(is);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
OutputStream os = socket.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
objectInputStream ois = new objectInputStream(is);
String str1 = br.readLine();
dos.writeUTF(str1);
dos.flush();
String str2 = br.readLine();
dos.writeUTF(str2);
dos.flush();
String str3 = dis.readUTF();
System.out.println(“【A】A接受到B的输入:“ + str3);
if (“y“.equalsIgnoreCase(str3)) {
System.out.println(“【A】AB通话开始......“);
System.out.println(“【A】A接收B的公钥开始......“);
setPubKey((RSAPublicKey) ois.readobject());
System.out.println(“【A】A接收B的公钥完毕......“);
send();
System.out.println(“【A】A开始发送由B公钥加密过的密文......“);
File file = new File(RSA_SIGN_FILE);
long length= file.length();
dos.writeLong(length);
BufferedInputStream bis = new BufferedInputStream(
new FileInputStream(RSA_SIGN_FILE));
int a;
while ((a = bis.read()) != -1) {
dos.write(a);
}
bis.close();
BufferedInputStream bis2 = new BufferedInputStream(
new FileInputStream(RSA_FILE));
int b;
while ((b = bis2.read()) != -1) {
dos.write(b);
}
bis2.close();

System.out.println(“【A】A发送密文文件完毕......“);
System.out.println(“【A】AB通话结束...

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        292  2010-11-29 08:59  MySec\.classpath

     文件        381  2010-11-29 08:57  MySec\.project

     文件       1867  2010-11-29 08:57  MySec\src\util\FileUtils.java

     文件       1096  2010-11-29 09:41  MySec\src\util\KeyUtils.java

     文件        922  2010-11-29 09:41  MySec\src\util\MD5Utils.java

     文件       3454  2010-11-29 09:42  MySec\src\util\RSAUtils.java

     文件       2332  2010-11-29 08:57  MySec\src\util\SignUtils.java

     文件       1117  2010-11-29 09:40  MySec\src\test\SecTest.java

     文件       3254  2010-11-29 09:55  MySec\src\net\A.java

     文件       3651  2010-11-29 10:00  MySec\src\net\B.java

     文件     953845  2010-11-29 08:58  MySec\lib\jce-jdk13-120.jar

     文件       1831  2010-11-29 08:59  MySec\bin\util\FileUtils.class

     文件       1336  2010-11-29 09:41  MySec\bin\util\KeyUtils.class

     文件       1483  2010-11-29 09:41  MySec\bin\util\MD5Utils.class

     文件       2917  2010-11-29 09:42  MySec\bin\util\RSAUtils.class

     文件       1658  2010-11-29 08:59  MySec\bin\util\SignUtils.class

     文件       1197  2010-11-29 09:40  MySec\bin\test\SecTest.class

     文件       4672  2010-11-29 09:55  MySec\bin\net\A.class

     文件       4865  2010-11-29 10:00  MySec\bin\net\B.class

     目录          0  2010-12-10 10:41  MySec\src\util

     目录          0  2010-12-10 10:41  MySec\src\test

     目录          0  2010-12-10 10:41  MySec\src\net

     目录          0  2010-12-10 10:41  MySec\bin\util

     目录          0  2010-12-10 10:41  MySec\bin\test

     目录          0  2010-12-10 10:41  MySec\bin\net

     目录          0  2010-12-10 10:41  MySec\src

     目录          0  2010-12-10 10:41  MySec\lib

     目录          0  2010-12-10 10:41  MySec\bin

     目录          0  2010-12-10 10:41  MySec

----------- ---------  ---------- -----  ----

............此处省略2个文件信息

评论

共有 条评论