import java.io.*; 
import java.security.*; 
import java.security.cert.*; 
import java.util.*; 
import java.math.*; 
import sun.security.x509.*; 
public class wSignCert extends javax.swing.JFrame { 
     private void initComponents() { 
        jLabel1 = new javax.swing.JLabel(); 
        jPasswordField1 = new javax.swing.JPasswordField(); 
        jButton1 = new javax.swing.JButton(); 
        jButton2 = new javax.swing.JButton(); 
        jTextField1 = new javax.swing.JTextField(); 
        jLabel2 = new javax.swing.JLabel(); 
        jPasswordField2 = new javax.swing.JPasswordField(); 
        jLabel3 = new javax.swing.JLabel();         setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
        jLabel1.setText("\u5bc6\u94a5\u5e93\u5bc6\u7801");         jButton1.setText("\u786e\u5b9a");         jButton2.setText("\u7b7e\u540d"); 
        jButton2.addMouseListener(new java.awt.event.MouseAdapter() { 
            public void mouseClicked(java.awt.event.MouseEvent evt) { 
                sign(evt); 
            } 
        });         jLabel2.setText("ca\u5bc6\u7801");         jLabel3.setText("\u6587\u4ef6\u540d");         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
        getContentPane().setLayout(layout); 
        layout.setHorizontalGroup( 
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
            .addGroup(layout.createSequentialGroup() 
                .addGap(20, 20, 20) 
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
                    .addGroup(layout.createSequentialGroup() 
                        .addComponent(jLabel3) 
                        .addGap(17, 17, 17) 
                        .addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 109, Short.MAX_VALUE)) 
                    .addGroup(layout.createSequentialGroup() 
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
                            .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE) 
                            .addComponent(jLabel2)) 
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
                            .addComponent(jPasswordField2, javax.swing.GroupLayout.DEFAULT_SIZE, 103, Short.MAX_VALUE) 
                            .addComponent(jPasswordField1, javax.swing.GroupLayout.DEFAULT_SIZE, 103, Short.MAX_VALUE)))) 
                .addGap(149, 149, 149) 
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
                    .addComponent(jButton2, javax.swing.GroupLayout.Alignment.TRAILING, 0, 0, Short.MAX_VALUE) 
                    .addComponent(jButton1, javax.swing.GroupLayout.Alignment.TRAILING)) 
                .addContainerGap()) 
        ); 
        layout.setVerticalGroup( 
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
            .addGroup(layout.createSequentialGroup() 
                .addContainerGap() 
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
                    .addComponent(jLabel3) 
                    .addComponent(jTextField1)) 
                .addGap(24, 24, 24) 
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
                    .addComponent(jButton1) 
                    .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE) 
                    .addComponent(jPasswordField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
                    .addComponent(jLabel2) 
                    .addComponent(jPasswordField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 89, Short.MAX_VALUE) 
                .addComponent(jButton2) 
                .addGap(73, 73, 73)) 
        ); 
        pack(); 
    }
    private void sign(java.awt.event.MouseEvent evt) {                        
        try{
         this.signcert();
        }catch( Exception ex){
           ex.printStackTrace();
        }
    }                      
   private void signcert() throws Exception{
char[] storepass=jPasswordField1.getText().toCharArray(); 
char[] cakeypass=jPasswordField2.getText().toCharArray(); 
String alias="CA"; 
String name="mykeystore"; 
String ar=jTextField1.getText(); 
//从密钥库读取CA的证书 
FileInputStream in=new FileInputStream(name); 
        KeyStore ks=KeyStore.getInstance("JKS"); 
        ks.load(in,storepass); 
        java.security.cert.Certificate c1=ks.getCertificate(alias); 
//从密钥库读取CA的私钥 
PrivateKey caprk=(PrivateKey)ks.getKey(alias,cakeypass); 
in.close(); 
//从CA的证书中提取签发者信息 
byte[] encod1=c1.getEncoded(); 
X509CertImpl cimp1=new X509CertImpl(encod1);  
X509CertInfo cinfo1=(X509CertInfo)cimp1.get(X509CertImpl.NAME+"."+X509CertImpl.INFO); 
X500Name issuer=(X500Name)cinfo1.get(X509CertInfo.SUBJECT+"."+CertificateIssuerName.DN_NAME); 
//获取待签发的证书 
        CertificateFactory cf=CertificateFactory.getInstance("X.509"); 
        FileInputStream in2=new FileInputStream(ar); 
        java.security.cert.Certificate c2=cf.generateCertificate(in2); 
        in2.close(); 
//从待签发的证书提取证书信息 
        byte[] encod2=c2.getEncoded(); 
        X509CertImpl cimp2=new X509CertImpl(encod2);      
        X509CertInfo cinfo2=(X509CertInfo)cimp2.get(X509CertImpl.NAME+"."+X509CertImpl.INFO); 
//设置新证书有效期 
        Date begindate =new Date(); 
        //3000 day 
        Date enddate =new Date(begindate.getTime()+3000*24*60*60*1000L);       
        CertificateValidity cv=new CertificateValidity(begindate,enddate); 
        cinfo2.set(X509CertInfo.VALIDITY,cv); 
        int sn=(int)(begindate.getTime()/1000); 
        CertificateSerialNumber csn=new CertificateSerialNumber(sn); 
        cinfo2.set(X509CertInfo.SERIAL_NUMBER,csn); 
        cinfo2.set(X509CertInfo.ISSUER+"."+CertificateIssuerName.DN_NAME,issuer); 
        AlgorithmId algorithm = new AlgorithmId(AlgorithmId.md5WithRSAEncryption_oid); 
        cinfo2.set(CertificateAlgorithmId.NAME+"."+CertificateAlgorithmId.ALGORITHM, algorithm); 
        X509CertImpl newcert=new X509CertImpl(cinfo2); 
        newcert.sign(caprk,"MD5WithRSA"); 
        System.out.println(newcert); 
        ks.setCertificateEntry("A_signed", newcert) ; 
        FileOutputStream out=new FileOutputStream("newstore"); 
        ks.store(out,"newpass".toCharArray()); 
        out.close();  }     
        public static void main(String args[]) { 
        java.awt.EventQueue.invokeLater(new Runnable() { 
            public void run() { 
                new wSignCert().setVisible(true); 
            } 
        }); 
    } 
    private javax.swing.JButton jButton1; 
    private javax.swing.JButton jButton2; 
    private javax.swing.JLabel jLabel1; 
    private javax.swing.JLabel jLabel2; 
    private javax.swing.JLabel jLabel3; 
    private javax.swing.JPasswordField jPasswordField1; 
    private javax.swing.JPasswordField jPasswordField2; 
    private javax.swing.JTextField jTextField1;     

这是我做的一个数字签名系统的部分模块 我本来在设计初期以signcert为主类设计(没有界面 在cmd里面打命令运行的那种)成功后我决定加一个界面 于是有了上面的代码 现在我运行的时候出现了问题 就是我按botton按钮也就是运行红色部分的程序 但是就是没反应 请各位帮个忙

解决方案 »

  1.   

    import java.io.*;
    import java.security.cert.*;
    import java.util.*;public class CheckCertValid extends javax.swing.JFrame {
        
        /**
         * Creates new form CheckCertValid
         */
        public CheckCertValid() {
            initComponents();
        }
        
        /** This method is called from within the constructor to
         * initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is
         * always regenerated by the Form Editor.
         */
        // <editor-fold defaultstate="collapsed" desc=" 生成的代码 ">                          
        private void initComponents() {
            jFrame1 = new javax.swing.JFrame();
            jFileChooser1 = new javax.swing.JFileChooser();
            jLabel1 = new javax.swing.JLabel();
            jLabel2 = new javax.swing.JLabel();
            jTextField1 = new javax.swing.JTextField();
            jLabel3 = new javax.swing.JLabel();
            jLabel4 = new javax.swing.JLabel();
            jLabel5 = new javax.swing.JLabel();
            jTextField2 = new javax.swing.JTextField();
            jTextField3 = new javax.swing.JTextField();
            jTextField4 = new javax.swing.JTextField();
            jButton1 = new javax.swing.JButton();
            jButton2 = new javax.swing.JButton();
            jScrollPane1 = new javax.swing.JScrollPane();
            jTextArea1 = new javax.swing.JTextArea();        javax.swing.GroupLayout jFrame1Layout = new javax.swing.GroupLayout(jFrame1.getContentPane());
            jFrame1.getContentPane().setLayout(jFrame1Layout);
            jFrame1Layout.setHorizontalGroup(
                jFrame1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jFrame1Layout.createSequentialGroup()
                    .addComponent(jFileChooser1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(24, Short.MAX_VALUE))
            );
            jFrame1Layout.setVerticalGroup(
                jFrame1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jFrame1Layout.createSequentialGroup()
                    .addComponent(jFileChooser1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(14, Short.MAX_VALUE))
            );        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
            addMouseListener(new java.awt.event.MouseAdapter() {
                public void mouseClicked(java.awt.event.MouseEvent evt) {
                    formMouseClicked(evt);
                }
            });        jLabel1.setText("\u8bc1\u4e66\u540d");        jLabel2.setText("\u65e5\u671f");        jLabel3.setText("\u5e74");        jLabel4.setText("\u6708");        jLabel5.setText("\u65e5");        jButton1.addMouseListener(new java.awt.event.MouseAdapter() {
                public void mouseClicked(java.awt.event.MouseEvent evt) {
                    jButton1MouseClicked(evt);
                }
            });        jButton2.setText("\u8ba4\u8bc1");        jTextArea1.setColumns(20);
            jTextArea1.setRows(5);
            jScrollPane1.setViewportView(jTextArea1);        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(38, 38, 38)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 270, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabel2)
                        .addGroup(layout.createSequentialGroup()
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(jLabel3)
                                .addComponent(jLabel4)
                                .addComponent(jLabel5))
                            .addGap(27, 27, 27)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                .addComponent(jTextField4)
                                .addComponent(jTextField3)
                                .addComponent(jTextField2)
                                .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 85, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addGroup(layout.createSequentialGroup()
                                    .addGap(16, 16, 16)
                                    .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addGroup(layout.createSequentialGroup()
                                    .addGap(35, 35, 35)
                                    .addComponent(jButton2)))))
                    .addContainerGap(144, Short.MAX_VALUE))
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(layout.createSequentialGroup()
                            .addGap(1, 1, 1)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGap(20, 20, 20)
                            .addComponent(jLabel2)
                            .addGap(23, 23, 23)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                .addComponent(jLabel3)
                                .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGap(23, 23, 23)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                .addComponent(jLabel4)
                                .addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGap(29, 29, 29)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                .addComponent(jLabel5)
                                .addComponent(jTextField4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(jButton2)))
                        .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 31, Short.MAX_VALUE)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 106, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGap(46, 46, 46))
            );
            pack();
        }// </editor-fold>                        
      

  2.   

        private void formMouseClicked(java.awt.event.MouseEvent evt) {                                  
    // TODO 将在此处添加您的处理代码:
           try{
             this.CheckCertValid();
            }catch( Exception ex){
               ex.printStackTrace();
            }    }                                     
    private void CheckCertValid() throws Exception{
            // TODO code application logic here
            CertificateFactory cf=CertificateFactory.getInstance("X.509");
            String file=jTextField1.getText();
            String year1=jTextField2.getText();
            String month1=jTextField3.getText();
            String day1=jTextField4.getText();
            FileInputStream in=new FileInputStream(file);
            java.security.cert.Certificate c=cf.generateCertificate(in);
            in.close();
            X509Certificate t=(X509Certificate) c;
    //获取日期
            Calendar cld=Calendar.getInstance();
            int year=Integer.parseInt(year1);
            int month=Integer.parseInt(month1)-1;  // as 0 is Jan
            int day=Integer.parseInt(day1);
            cld.set(year,month,day);
            Date d=cld.getTime();
            try{                                         //检验有效期
                t.checkValidity(d);
                jTextArea1.setText("OK");
            }catch(CertificateExpiredException e){   //过期
                jTextArea1.setText("Expired");
                jTextArea1.setText(e.getMessage());
            }
            catch(CertificateNotYetValidException e){   //尚未生效
                System.out.println("Too early");
                System.out.println(e.getMessage());
            }
            
        }
        
        private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                      
    // TODO 将在此处添加您的处理代码:
             File f1 = new File("c:\\");  
            int result; 
            result = jFileChooser1.showOpenDialog(this); 
            if (result == jFileChooser1.APPROVE_OPTION) { 
                File file = jFileChooser1.getSelectedFile();
                String x=file.toString();
                jTextField1.setText(x);
            }
        }                                     
        
        /**
         * @param args the command line arguments
         */
        public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new CheckCertValid().setVisible(true);
                }
            });
        }
        
        // 变量声明 - 不进行修改                     
        private javax.swing.JButton jButton1;
        private javax.swing.JButton jButton2;
        private javax.swing.JFileChooser jFileChooser1;
        private javax.swing.JFrame jFrame1;
        private javax.swing.JLabel jLabel1;
        private javax.swing.JLabel jLabel2;
        private javax.swing.JLabel jLabel3;
        private javax.swing.JLabel jLabel4;
        private javax.swing.JLabel jLabel5;
        private javax.swing.JScrollPane jScrollPane1;
        private javax.swing.JTextArea jTextArea1;
        private javax.swing.JTextField jTextField1;
        private javax.swing.JTextField jTextField2;
        private javax.swing.JTextField jTextField3;
        private javax.swing.JTextField jTextField4;
        // 变量声明结束                   
        
    }
    这个是另外的一个 用来验证证书有效期的 看起来方便点 问题都一样 就是在图形界面的时候按验证 不能运行
      

  3.   

    我做的不复杂 稍微做一个 用来过大学的毕业设计的反正现在能用了(仅是cmd版本)我想做个图形界面 总是cmd打命令 我自己也受不了 到时候演示的话很麻烦
      

  4.   

    我也知道的。。但是就是按了botton没反应 郁闷着呢,,
      

  5.   

    那你点button2有反映吗?你没给button1加监听器啊
      

  6.   

    。我是白痴。。我把监听设到form了 不过其他算法出了问题。。不管怎么验证都是ok 晕我再去做 先帮你揭帖了 谢谢你 我记得上次也是你帮的忙
      

  7.   

    别客气,我一开始以为你说的那个button是button2,后来看button2加监听器了,发现button1没有,呵呵