[JAVA加解密]对登陆密码及网络传输内容加密

该博客介绍了JAVA中对登陆密码的加密方法,包括使用MD5摘要和加盐处理增强安全性。此外,还讨论了IM应用开发中的数据安全,如隐藏和加密网络传输数据,并提供了基于UDPSocket的聊天系统实现示例。文章详细解析了代码结构和关键类的功能,如MainFrame、InitDialog和UDPSocket。
摘要由CSDN通过智能技术生成

所有源代码都在资源中有上传,这里我们主要构建了两个项目,第一个是一个简单的web登陆页面。

一、对登陆密码加密:

搭建过程不赘述

1、数据库中执行:update account set password=MD5(password)

一开始我是这么做的:update account set password=MD5('password'),注意别傻


这样一来就将数据库中的密码用MD5摘要处理了,注意页面中相应修改代码。为加大破译难度,我们通常采用了是下面的方法,用其他信息(如邮箱)当做盐,加盐处理。


2.安全升级-加盐处理update account set password = sha(concat(email,password))

注意相应代码修改,如校验部分:

if(p.equals(DigestUtils.shaHex(email+password)){ }


二、实例:IM应用开发安全:

安全升级-隐藏数据

安全升级-加密数据

这里我们基于UDPSocket搭建了一个聊天系统。将网络中传递的数据隐藏(Base64并)加密

socket.send(Security.encrypt(message.getBytes(CHARSET)));
byte[] data = Security.decrypt(socket.receive());
		String message = new String(data,CHARSET);

实际上有了安全类之后,这么弄就行了。用wireshark无法再直接得到信息。


三、IM应用开发:

介于自己对应用搭建部分不熟,下面分析下这部分代码:

MainFrame 类:

用mainFrame对象开启一个线程:

public static void main(String[] args) throws UnknownHostException, SocketException{
		MainFrame mainFrame = new MainFrame();
		Thread t = new Thread(mainFrame);
		t.start();
	}
public void run() {
		while(true){
			try {
				receive();
			} catch (UnsupportedEncodingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}
线程内循环接收数据。



当接收到数据:

	public void receive() throws UnsupportedEncodingException, IOException{
		byte[] data = Security.decrypt(socket.receive());
		String message = new String(data,CHARSET);
		StringBuilder sb = new StringBuilder();
		sb.append(receiveArea.getText());
		sb.append(message);
		receiveArea.setText(sb.toString());
	}
解密,刷新接收框,将新收到的数据追加到最后。

怎么追加到最后的?

先把已有的数据拿到,放到StringBuilder,再追加


MainFrame类里有这几个对象:

	private static final String CHARSET="UTF-8";
	private UDPSocket socket;
	private InitDialog initDialog;
	public static final int DEFAULT_WIDTH=500;
	public static final int DEFAULT_HEIGHT=400;
	
	private JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
	
	private JTextArea sendTextArea = new JTextArea();
	private JTextArea receiveArea = new JTextArea();
	
	private JPanel buttonPanel = new JPanel();
	


操作部分:UDP套接口,initDialog

图形部分:一个水平分割的pane,输入输出区,按钮区


初始化时:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值