⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 diddie-hellman.txt

📁 经典而且著名的三大加密算法:RSA算法 DES算法 Diddie-Hellman算法--java实现
💻 TXT
字号:
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.event.*;
public class DU {
JFrame f;
JTextField t1;
JTextField t2;
JTextField t3;
JTextField t4;
JTextField t5;
JLabel l1;
JLabel l2;
JLabel l3;
JLabel l4;
JLabel l5;
JButton ok;
int q=353;
int root=3;
int x1=0;
int x2=0;
int y1=0;
int y2=0;
int number1=0;
int number2=0;
int a[]=new int[100];
int b[]=new int[100];
int key1=0;
int key2=0;
public DU()
   {
	f=new JFrame("DU");
	f.setLocation(300,300);
	f.setSize(400,300);
	t1=new JTextField(8);
	t2=new JTextField(8);
	t3=new JTextField(8);
	t4=new JTextField(8);
	t5=new JTextField(8);
	t1.setBounds(10,100,50,25);
	t2.setBounds(90,100,50,25);
	t3.setBounds(170,100,50,25);
	t4.setBounds(250,100,50,25);
	t5.setBounds(330,100,50,25);
	
	ok=new JButton("start");
	ok.setBounds(140,200,70,25);
	l1=new JLabel("X(A)");
	l2=new JLabel("X(B)");
	l3=new JLabel("Y(A)");
	l4=new JLabel("Y(A)");
	l5=new JLabel("K");
	l1.setBounds(20,60,50,30);
	l2.setBounds(107,60,50,30);
	l3.setBounds(183,60,50,30);
	l4.setBounds(262,60,50,30);
	l5.setBounds(350,60,50,30);
	Container c=f.getContentPane();
	c.setLayout(null);
	c.add(l1,null);
	c.add(l2,null);
	c.add(l3,null);
	c.add(l4,null);
	c.add(l5,null);
	c.add(t1,null);
	c.add(t2,null);
	c.add(t3,null);
	c.add(t4,null);
	c.add(t5,null);
	c.add(ok,null);
	ok.addActionListener(
  			 new ActionListener()
  			 {
  				 public void actionPerformed(ActionEvent e)
  				 {
  				   x1=Integer.parseInt(t1.getText());
  				   toerjinzhi1(x1);
  				   addsum1(a,number1,q);
  				   String good=String.valueOf(y1);
  				   t3.setText(good);
  				   x2=Integer.parseInt(t2.getText());
  				   toerjinzhi2(x2);
  				   addsum2(b,number2,q);
  				   String nice=String.valueOf(y2);
  				   t4.setText(nice);
  				   addsum3(y2,a,number1,q);
  				   addsum4(y1,b,number2,q);
  				   if(key1==key2)
  				   {
  					   String over=String.valueOf(key1);
  					   t5.setText(over);
  				   }
  				 }
  			 });
	    
	
	f.setVisible(true);
   }
public int[] toerjinzhi1(int x1)//x1转换为二进制数
{
   this.x1=x1;


int i;int j=0;

for(i=0;i<99;i++)
   {j=x1%2;
     x1=x1/2;
    a[i]=j;
    if(x1==0)
     {number1=i; break;}}

return a;

 
}
public int addsum1(int[]a,int number1,int q)//加密求模
   {
	this.number1=number1;
	this.q=q;
	this.a=a;
	int re=1;
	int rf=0;int j=number1;
	for(int i=0;i<=number1;i++)
	{
	rf=rf*2;
	re=(re*re)%q;
	if(a[j]==1)
	   {
	      rf=rf+1;
	      re=(re*root)%q;
	      y1=re;
	    }
        j--;
	}
	return y1;
   }
public int[] toerjinzhi2(int x2)//x2转换为二进制数
{
   this.x2=x2;


int i;int j=0;

for(i=0;i<99;i++)
   {j=x2%2;
     x2=x2/2;
    b[i]=j;
    if(x2==0)
     {number2=i; break;}}

return b;

 
}
public int addsum2(int[]b,int number2,int q)//加密求模
{
	this.number2=number2;
	this.q=q;
	this.b=b;
	int re=1;
	int rf=0;int j=number2;
	for(int i=0;i<=number2;i++)
	{
	rf=rf*2;
	re=(re*re)%q;
	if(b[j]==1)
	   {
	      rf=rf+1;
	      re=(re*root)%q;
	      y2=re;
	    }
     j--;
	}
	return y2;
}
public int addsum3(int y2,int[] a,int number1,int q)//求key1
   {
	this.y2=y2;
	this.a=a;
	this.number1=number1;
	this.q=q;
	int re=1;
	int rf=0;int j=number1;
	for(int i=0;i<=number1;i++)
	{
	rf=rf*2;
	re=(re*re)%q;
	if(a[j]==1)
	   {
	      rf=rf+1;
	      re=(re*y2)%q;
	      key1=re;
	    }
     j--;
	}
	return key1;
	
	
   }
public int addsum4(int y1,int[] b,int number2,int q)//求key2
   {
	this.y1=y1;
	this.b=b;
	this.number2=number2;
	this.q=q;
	int re=1;
	int rf=0;int j=number2;
	for(int i=0;i<=number2;i++)
	{
	rf=rf*2;
	re=(re*re)%q;
	if(b[j]==1)
	   {
	      rf=rf+1;
	      re=(re*y1)%q;
	      key2=re;
	    }
     j--;
	}
	return key2;
   }

public static void main(String args[])
  {
	new DU();
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -