package net;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import util.FileUtils;
import util.KeyUtils;
import util.MD5Utils;
import util.RSAUtils;
import util.SignUtils;
public class B {
private String KEY_FILE="d:/test/B/BKey.dat";
private static String A_RSA_SIGN_FILE="d:/test/B/aRsaSign.dat";
private static String A_RSA_FILE="d:/test/B/aRsaTest.dat";
private static String SIGN_FILE="d:/test/B/sign.dat";
private static String FILE="d:/test/B/testResult.txt";
private static RSAPublicKey pubKey;
private static RSAPrivateKey priKey;
public void init(){
//创建目录
File f = new File("d:/test/B");
f.mkdirs();
KeyUtils.createPairKey(KEY_FILE);
pubKey = (RSAPublicKey) FileUtils.getObjFromFile(KEY_FILE, 1);
priKey = (RSAPrivateKey) FileUtils.getObjFromFile(KEY_FILE, 2);
}
public void start() throws Exception {
Socket socket = new Socket("127.0.0.1", 520);
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);
ObjectOutputStream oos = new ObjectOutputStream(os);
String str1 = dis.readUTF();
System.out.println(str1);
String str2 = dis.readUTF();
System.out.println(str2);
String str3 = br.readLine();//输入y
System.out.println("【B】B的输入:"+str3);
dos.writeUTF(str3);
dos.flush();
System.out.println("【B】AB通话开始......");
System.out.println("【B】B传送公钥开始...");
oos.writeObject(pubKey);
System.out.println("【B】B传送公钥完毕...");
System.out.println("【B】B开始接收密文........");
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(A_RSA_SIGN_FILE));
BufferedOutputStream bos2 = new BufferedOutputStream(
new FileOutputStream(A_RSA_FILE));
long length=dis.readLong();
int a=0;
int len=0;
while (len<length) {
a=dis.read();
bos.write(a);
len++;
}
bos.close();
int b;
while ((b = dis.read()) != -1) {
bos2.write(b);
}
bos2.close();
System.out.println("【B】B接收密文完毕........");
System.out.println("【B】AB通话结束......");
socket.close();
}
public static void main(String[] args) throws Exception {
System.out.println("B:");
B b= new B();
b.init();
b.start();
System.out.println("【B】B开始解密密文...");
RSAUtils.decryptToFile(priKey, A_RSA_SIGN_FILE, SIGN_FILE);
System.out.println("【B】B开始验证数字签名...");
boolean flag =SignUtils.validateSign(SIGN_FILE);
if(flag){
System.out.println("【B】B数字签名验证通过...");
String info = (String) FileUtils.getObjFromFile(SIGN_FILE, 3);
System.out.println("【B】从签名中得到明文的MD5值是:");
System.out.println("【B】"+info);
System.out.println("【B】开始计算接收到明文的MD5值...");
RSAUtils.decryptToFile(priKey, A_RSA_FILE, FILE);
String md5 = MD5Utils.md5(FILE);
System.out.println("【B】得出明文的MD5值是:");
System.out.println("【B】"+md5);
System.out.println("【B】比较MD5值,结果是:"+info.equals(md5)+" (相同)");
}
System.out.println("【B】操作完毕..........");
}
}

Ryan_zhanggs
- 粉丝: 15
最新资源
- 2023年3月三级网络笔试题.doc
- 基于灰狼算法的局部阴影遮挡下MPPT实现及仿真分析
- 基于YOLOv8的公共场所六分类危险武器检测系统:Python源码+Pyqt6界面+数据集 - 数据集
- COMSOL仿真中压力声学与固体力学模块的关键技术解析及应用实例
- 基于阿基米德优化算法的自定义路径规划:鲁棒性强、简单易实现、适应性广的应用解析 - Python 教程
- 光子学领域的Comsol光子晶体光纤与SPR PCF传感器及其谷自旋分离技术的应用研究 几何相位缺陷态
- 基于改进自适应蚁群算法MAACO的多智能体路径规划及其MATLAB实现
- 二自由度机械臂的RBF自适应控制与传统滑模控制对比研究
- LTC3542同步Buck变换器:高效电源管理芯片设计与应用 · Cadence 必备版
- 基于西门子1200与博图v16版本的锅炉控制系统:PLC程序、HMI组态画面与相关清单 · 工业自动化 说明
- 基于COMSOL的涂层剥离瞬态仿真与多体动力学接触粘附罚函数研究 多体动力学
- 分布式驱动电动汽车七状态估计模型:基于CKF与Dugoff轮胎力计算的联合仿真研究 (07月28日)
- 基于Carsim与Simulink联合仿真模型的车辆换道轨迹规划与跟踪模型实践
- 三相PWM整流器滑模整流控制(外环)的原理与应用研究
- Amesim在HEV热管理和电池热管理中的应用及大厂培训模型解析
- Qt5开发的西门子S7通信数据上传验证程序:支持SQL Server与MySQL的双数据库生产线追溯系统
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


