admingenkey.java
来自「用纯java语言实现的数字证书制作工具。」· Java 代码 · 共 183 行
JAVA
183 行
package data;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.sql.*;
import java.io.*;
import data.MyWindowListener;
import data.Connect;
import java.security.*;
import java.security.spec.*;
import java.security.interfaces.*;
import java.math.*;
import data.BASE64Encoder;
public class AdminGenKey extends JFrame implements ActionListener
{ //interface
private JTextField AdminID;
private JTextField AdminName;
private JButton ok;
private JButton cancel;
//keys define
KeyPairGenerator kpg;
KeyPair kp;
PublicKey pbkey;
PrivateKey prkey;
RSAPublicKey pbk;
RSAPrivateKey prk;
byte[] b_prk,b_pbk;
String s_pbk,s_prk;
BASE64Encoder BE=new BASE64Encoder();
public AdminGenKey()
{
super("生成管理员密钥对的界面");
Container c=getContentPane();
c.setLayout(new FlowLayout());
AdminID=new JTextField(10);
AdminName=new JTextField(10);
c.add(new JLabel("管理员的ID:"));
c.add(AdminID);
c.add(new JLabel("管理员的名字"));
c.add(AdminName);
ok=new JButton("确认");
c.add(ok);
cancel=new JButton("重置");
c.add(cancel);
setSize(240,130);
setVisible(true);
ok.addActionListener(this);
cancel.addActionListener(this);
}
public void actionPerformed(ActionEvent s)
{
if(s.getSource()==ok)
{
String query;
String Admin_ID,Admin_Name,msg;
Admin_ID=AdminID.getText().trim();
Admin_Name=AdminName.getText().trim();
if(Admin_ID.equals(""))
{
msg="请填写您的ID!";
JOptionPane.showMessageDialog(null,msg);
System.out.println(msg);
}
else if(Admin_Name.equals(""))
{
msg="请填写您的名字!";
JOptionPane.showMessageDialog(null,msg);
System.out.println(msg);
}
else try
{
Connect conn=new Connect();
Statement stmt=conn.con.createStatement();
query="select * from AdminData where AdminId='" + Admin_ID+"' and "
+"AdminName='"+Admin_Name+"'";
ResultSet rs=stmt.executeQuery(query);
int result=0;
System.out.println("OK");
while(rs.next())
result+=1;
if(result!=0)
{
msg="你已经拥有了密钥对,请检查!";
JOptionPane.showMessageDialog(null,msg);
}
else try
{
kpg=KeyPairGenerator.getInstance("RSA");
kpg.initialize(512);
kp=kpg.genKeyPair();
pbkey=kp.getPublic();
prkey=kp.getPrivate();
pbk= (RSAPublicKey)pbkey;
prk = (RSAPrivateKey)prkey;
System.out.println(pbk);
System.out.println(prk);
//生成私钥文件存储用户私钥实例
// FileOutputStream f1 = new FileOutputStream("AdminPrivateKey.dat");
// ObjectOutputStream b1=new ObjectOutputStream(f1);
// b1.writeObject(prk);
//将对象转化为byte[],将密钥对通过BASE64编码,作为字节流存入数据库
ByteArrayOutputStream baos1 = new ByteArrayOutputStream();
ObjectOutputStream oos1 = new ObjectOutputStream(baos1);
oos1.writeObject(prk);
oos1.close();
b_prk=baos1.toByteArray();
baos1.close();
s_prk=BE.encode(b_prk);
System.out.println(s_prk);
//生成公钥文件存储用户公钥实例
// FileOutputStream f2 = new FileOutputStream("AdminPublicKey.dat");
// ObjectOutputStream b2=new ObjectOutputStream(f2);
// b2.writeObject(pbk);
ByteArrayOutputStream baos2 = new ByteArrayOutputStream();
ObjectOutputStream oos2 = new ObjectOutputStream(baos2);
oos2.writeObject(pbk);
oos2.close();
b_pbk=baos2.toByteArray();
baos2.close();
s_pbk=BE.encode(b_pbk);
System.out.println(s_pbk);
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,"不能产生密钥对!");
System.out.println("Can't generate the keys!");
}
query = "insert into AdminData(AdminName,AdminId,AdminPublicKey,"
+"AdminPrivateKey) values ('"
+Admin_Name+"','"+Admin_ID+"','"+s_pbk+"','"+s_prk+"')";
stmt.executeUpdate(query);
System.out.println("Insert Suceed!");
JOptionPane.showMessageDialog(null,"您的密钥对已经进入数据库!");
JOptionPane.showMessageDialog(null,"您的公钥是\n"+pbk+"\n您的密钥是\n"+prk);
stmt.close();
conn.con.close();
this.setVisible(false);
return;
}
catch(SQLException ie)
{
String mm;
mm="数据库执行错误:"+ie.getMessage();
JOptionPane.showMessageDialog(null,mm);
System.out.println("SQLException:"+ie.toString());
}
}
if(s.getSource()==cancel)
{
AdminID.setText("");
AdminName.setText("");
}
}
public static void main(String args[]) throws Exception
{
AdminGenKey one=new AdminGenKey();
one.addWindowListener(new MyWindowListener());
one.setBounds(400,360,240,130);
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?