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 + -
显示快捷键?