📄 diddie-hellman.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 + -