步骤一:实现基于JAVA的用户个体之间用户通讯
发送方:
import java.net.InetAddress;
import java.nio.charset.StandardCharsets;
public class send_test {
public static void main(String[] args) throws Exception {
//创建发送Socket的对象
DatagramSocket ds = new DatagramSocket();
//创建数据包对象
byte bytes[] = "HelloWorld".getBytes();
DatagramPacket dp = new DatagramPacket(
bytes,bytes.length, InetAddress.getByName("这里写目标的主机号"),12345);
//发送数据
ds.send(dp);
//关闭资源
ds.close();
}
}
接收方:
package 网络安全;
import jdk.swing.interop.SwingInterOpUtils;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class receive_test {
public static void main(String[] args)throws Exception {
//创建接收端socket对象
DatagramSocket ds = new DatagramSocket(12345);
//创建接收容器
byte bytes[] = new byte[1024];
DatagramPacket dp = new DatagramPacket(bytes,bytes.length);
//接收数据
ds.receive(dp);
System.out.println("乌拉拉");
//解析数据
String ip = dp.getAddress().getHostAddress();
String s = new String(dp.getData(),0,dp.getLength());
System.out.println("来自于:"+ip+"的数据是:"+s);
//释放资源
ds.close();
}
}
步骤二:实现diffle-hellman算法的验证
1,传入一个素数q,返回其原根a
2,算法原理
摘录自百度百科
3,算法验证
这里有个问题若XA,XB太大如32,在计算a的XB次方是便会出现误差,两者将对不上号,目前尚不清楚改成二进制表示能不能行
public class Diffle_Hellman_Test {
public static void main(String[] args) {
int q = 97;
int a = 5; //之前对原根的理解肯定有些问题
int XA=2,XB=3;
//算法理解没有问题,但是5的36次方太大,于是第一步就出现误差
double YA_0 = Math.pow(a,XA);
double YA = YA_0 % q;
double YB = Math.pow(a,XB) % q;
double K1 = Math.pow((Math.pow(a,XB) % q),XA) % q;
double K2 = Math.pow((Math.pow(a,XA) % q),XB) % q;
if(K1==K2) System.out.println("增值的G");
else System.out.println("乌拉拉");
}
}