基于RSA非对称加密算法的UDP加密传输(杨振林)

本文介绍了基于RSA非对称加密算法实现UDP通信加密的方法。首先阐述了UDP协议的特点,接着详细描述了RSA加密原理,强调了公钥和私钥在加密解密中的角色。通过创建公钥和私钥,并通过UDP传输公钥,确保了数据的安全性,实现了数据的加密传输。发送方使用公钥加密数据,接收方利用私钥解密,从而保护了通信内容不被窃取。
摘要由CSDN通过智能技术生成

作者:杨振林

 

  UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

  不加密情况下使用UDP传输的过程如下。

 

接收方先运行等待发送方的数据。

 

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketAddress;

public class DatagramReciver {
	
	private static String ip="127.0.0.1";
	private static int reciveport=15000;
	
	public static void main(String args[]) throws Exception {
		// 1.创建要用来接收的本地地址对象
		SocketAddress localAddr = new InetSocketAddress(ip, reciveport);
		// 2.接收的服务器UDP端口
		DatagramSocket recvSocket = new DatagramSocket(localAddr);
		while (true) {
			// 3.指定接收缓冲区大小
			byte[] buffer = new byte[20];
			// 4.创建接收数据包对象,指定接收大小
			DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
			// 5.阻塞等待数据到来,如果收到数据,存入packet中的缓冲区中
			System.out.println("UDP服务器等待接收数据:"
					+ recvSocket.getLocalSocketAddress());
			recvSocket.receive(packet);
			// 得到发送方的IP和端口
			SocketAddress address = packet.getSocketAddress();
			// 转换接收到的数据为字符串
			String msg = new String(packet.getData()).trim();
			// 接收到后,打印出收到的数据长度
			System.out.println("recv is:" + msg + " from:" + address);
		}
	}
}
 

 

发送方发送数据

 

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketAddress;

public class DatagramSender {
	
	private static String ip="127.0.0.1";
	private static int sendport =13000;
	private static int reciveport=15000;
	public static void main(String args[]) throws Exception {
		// 1.创建要用来发送的本地地址对象
		SocketAddress localAddr = new InetSocketAddress(ip, sendport);
		// 2.创建发送的Socket对象
		DatagramSocket dSender = new DatagramSocket(localAddr);
		int count = 0;
		while (true) {
			// 创建要发送的数据,字节数组
			count++;
			// 3.要发送的数据
			byte buffer[] = (count + "-hello").getBytes();
			// 4.发送数据的目标地址和端口
			SocketAddress destAdd = new InetSocketAddress(ip,
					reciveport);
			// 5.创建要发送的数据包,指定内容,指定目标地址
			DatagramPacket dp = new DatagramPacket(buffer, buffer.length,
					destAdd);
			dSender.send(dp);// 6.发送
			System.out.println("数据已发送: " + count);
			Thread.sleep(1000);
		}
	}
}
 

 

  不加密情况下,我们传输的数据是暴露给外界的,使用Wireshark等抓包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值