计算机安全与密码

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

“计算机安全与密码”实验报告

实验内容:

C/S模式加解密与签名认证

学号:2014112140

姓名:饶舸璇

日期:2016-11-05

一、实验目的:

建立服务器和客户端的连接。然后在客户端将明文加密,签名,并且发送给服务器,在服务器端将获取的字符串分析并解密,然后验证签名。通过本实验,强化DES加密解密和RSA签名认

证的理解,对java语言实现加解密相关知识有更深刻的认识!

二、算法:

代码部分分为三个部分:C/S模式的实现,DES加密解密,RSA签名认证技术。下面依次是三个实现的模块:

Service.class:服务器

package com.ctgu.socket;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import .ServerSocket;

import .Socket;

import com.ctgu.des.Des;

import com.java.rsa.RSA;

import sun.misc.BASE64Decoder;

public class Service {

/**

* 基于TCP协议的Socket通信使用Socket网络编程

*

* @throws Exception

*/

public static void main(String[] args) throws Exception {

try {

// 创建一个服务器端Socket,即ServerSocket,指定绑定的接口

ServerSocket serverSocket = new ServerSocket(8888);

// 调用Accept方法开始监听,等待客户端的连接

System.out.println("服务器即将启动,等待客户端的连接.....");

Socket socket = serverSocket.accept();// 监听客户端

// 获取输入流,并读取客户端的信息

InputStream is = socket.getInputStream();// 字节输入流

InputStreamReader isr = new InputStreamReader(is);// 字节输入流转换为字符输入流

BufferedReader br = new BufferedReader(isr);// 为字符输入流设置缓冲

String info = null;

StringBuffer sub = new StringBuffer();

int j = 0;

while ((info = br.readLine()) != null) {// 循环读取缓冲

sub.append(info + "");

for (int i = 0; i < sub.length(); i++) {

char z = sub.charAt(i);

if (z == ',') {

j = i;

}

}

}

BASE64Decoder base64decoder = new BASE64Decoder();

String DEString = sub.substring(0, j);

byte[] encodeByte = base64decoder.decodeBuffer(DEString);

DEString = new String(Des.decrypt(encodeByte, "12345678"));

System.out.println(DEString);

String RSAString = sub.substring(j + 1);

byte[] encodeByte1 = base64decoder.decodeBuffer(RSAString);

if (!RSA.certification(encodeByte1, DEString))

System.out.println("认证成功!客户端说:" + DEString);

else

System.out.println("认证失败,请重发!");

socket.shutdownInput();

// 关闭资源

br.close();

isr.close();

is.close();

socket.close();

serverSocket.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

Client.Class:客户端

package com.ctgu.socket;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.IOException;

import java.io.OutputStream;

import java.io.PrintWriter;

import .Socket;

import .UnknownHostException;

import java.security.InvalidKeyException;

import java.security.NoSuchAlgorithmException; import java.security.spec.InvalidKeySpecException; import javax.crypto.BadPaddingException; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextField;

import javax.swing.border.EmptyBorder;

import com.ctgu.des.Des;

import com.java.rsa.RSA;

import sun.misc.BASE64Encoder;

@SuppressWarnings("serial")

public class Client extends JFrame {

/**

* 基于TCP编程的Scoket通信之客户端

*/

public JLabel lblNewLabel;

public JLabel label;

public JLabel label_1;

public JTextField textField;

public JTextField textField_1;

public JTextField textField_2;

public JButton btnNewButton;

private JPanel contentPane;

private String text1;

private String text2;

private String text3;

private byte[] result;

private byte[] result1;

相关文档
最新文档