问题描述
packageCaesar_Modification;importjava.awt.EventQueue;importjava.awt.TextArea;importjavax.crypto.BadPaddingException;importjavax.crypto.Cipher;importjavax.crypto.IllegalBlockSizeException;importjavax.crypto.NoSuchPaddingException;importjavax.crypto.spec.SecretKeySpec;importjavax.swing.JFrame;importjava.awt.Color;importjavax.swing.JButton;importjavax.swing.JTextField;importjavax.swing.JLabel;importjava.awt.event.ActionListener;importjava.awt.event.ActionEvent;importjava.io.BufferedReader;importjava.io.DataInputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.net.ServerSocket;importjava.net.Socket;importjava.security.InvalidKeyException;importjava.security.NoSuchAlgorithmException;publicclassMyServer{privateJFrameframe;privatestaticServerSocketserver_text1;privatestaticSocketyou_text1;privatestaticServerSocketserver_text2;privatestaticSocketyou_text2;privatestaticServerSocketserver_key;privatestaticSocketyou_key;privatestaticTextAreaSDealWith_Before1;privatestaticTextAreaSDealWith_Before2;privatestaticTextAreaSDealWith_After;privatestaticbyte[]keybyte;publicstaticvoidmain(String[]args){EventQueue.invokeLater(newRunnable(){publicvoidrun(){try{MyServerwindow=newMyServer();window.frame.setVisible(true);}catch(Exceptione){e.printStackTrace();}}});}publicMyServer()throwsIOException{initialize();}privatevoidinitialize()throwsIOException{frame=newJFrame();frame.getContentPane().setBackground(Color.LIGHT_GRAY);frame.setTitle("服务器端");frame.setBounds(100,100,450,300);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.getContentPane().setLayout(null);finalTextAreaSDealWith_Before1=newTextArea();SDealWith_Before1.setBounds(10,78,156,50);frame.getContentPane().add(SDealWith_Before1);finalTextAreaSDealWith_After=newTextArea();SDealWith_After.setBounds(227,103,150,115);frame.getContentPane().add(SDealWith_After);JLabellblNewLabel=newJLabel("接收到的秘钥");lblNewLabel.setBounds(227,10,93,15);frame.getContentPane().add(lblNewLabel);JLabellabel_1=newJLabel("处理后");label_1.setBounds(227,78,54,15);frame.getContentPane().add(label_1);JButtonbutton_1=newJButton("清除");button_1.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){SDealWith_After.setText("");SDealWith_Before1.setText("");SDealWith_Before2.setText("");}});button_1.setBounds(269,228,93,23);frame.getContentPane().add(button_1);finalTextAreaPri_KeyS=newTextArea();Pri_KeyS.setBounds(227,27,150,43);frame.getContentPane().add(Pri_KeyS);finalTextAreaSDealWith_Before2=newTextArea();SDealWith_Before2.setBounds(10,159,156,59);frame.getContentPane().add(SDealWith_Before2);JButtonbtnNewButton_1=newJButton("开启秘钥通道");btnNewButton_1.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){try{server_key=newServerSocket(5679);you_key=server_key.accept();InputStreamis=you_key.getInputStream();try{inttotal=is.available();keybyte=newbyte[total];Pri_KeyS.setText(keybyte.toString());server_key.close();you_key.close();}catch(IOExceptione1){e1.printStackTrace();}}catch(IOExceptione1){e1.printStackTrace();}}});btnNewButton_1.setBounds(10,6,150,23);frame.getContentPane().add(btnNewButton_1);JButtonbtnNewButton=newJButton("解密");btnNewButton.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){InputStreamin_1=null;InputStreamin_2=null;try{in_1=you_text1.getInputStream();in_2=you_text2.getInputStream();inttotal_ptext=in_1.available();inttotal_ctext=in_2.available();byte[]ctext=newbyte[total_ctext];byte[]ptext=newbyte[total_ptext];SecretKeySpeck=newSecretKeySpec(keybyte,"DESede");Ciphercp=Cipher.getInstance("DESede");cp.init(Cipher.DECRYPT_MODE,k);byte[]text=cp.doFinal(ctext);Stringp=newString(text,"UTF8");SDealWith_Before1.setText(ptext.toString());SDealWith_Before2.setText(ctext.toString());SDealWith_After.setText(p);}catch(IOExceptione2){e2.printStackTrace();}catch(NoSuchAlgorithmExceptione1){//TODOAuto-generatedcatchblocke1.printStackTrace();}catch(NoSuchPaddingExceptione1){//TODOAuto-generatedcatchblocke1.printStackTrace();}catch(InvalidKeyExceptione1){//TODOAuto-generatedcatchblocke1.printStackTrace();}catch(IllegalBlockSizeExceptione1){//TODOAuto-generatedcatchblocke1.printStackTrace();}catch(BadPaddingExceptione1){//TODOAuto-generatedcatchblocke1.printStackTrace();}try{you_text1.close();server_text1.close();}catch(IOExceptione1){e1.printStackTrace();}}});btnNewButton.setBounds(111,228,93,23);frame.getContentPane().add(btnNewButton);JButtonbtnNewButton_2=newJButton("开启密文通道");btnNewButton_2.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){try{server_text1=newServerSocket(5678);you_text1=server_text1.accept();server_text2=newServerSocket(5677);you_text2=server_text2.accept();}catch(IOExceptione1){e1.printStackTrace();}}});btnNewButton_2.setBounds(10,39,150,23);frame.getContentPane().add(btnNewButton_2);JLabellblNewLabel_2=newJLabel("输入UTF8字节");lblNewLabel_2.setBounds(20,61,72,23);frame.getContentPane().add(lblNewLabel_2);JLabellbldes=newJLabel("通过DES加密后");lbldes.setBounds(20,134,93,23);frame.getContentPane().add(lbldes);}}运行时总是显示空指针异常,秘钥没有传到这个客户端里。。Exceptioninthread"AWT-EventQueue-0"java.lang.IllegalArgumentException:Emptykeyatjavax.crypto.spec.SecretKeySpec.<init>(SecretKeySpec.java:96)atCaesar_Modification.MyServer$4.actionPerformed(MyServer.java:147)atjavax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)atjavax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)atjavax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)atjavax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)atjavax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)atjava.awt.Component.processMouseEvent(Component.java:6505)atjavax.swing.JComponent.processMouseEvent(JComponent.java:3321)atjava.awt.Component.processEvent(Component.java:6270)atjava.awt.Container.processEvent(Container.java:2229)atjava.awt.Component.dispatchEventImpl(Component.java:4861)atjava.awt.Container.dispatchEventImpl(Container.java:2287)atjava.awt.Component.dispatchEvent(Component.java:4687)atjava.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)atjava.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)atjava.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)atjava.awt.Container.dispatchEventImpl(Container.java:2273)atjava.awt.Window.dispatchEventImpl(Window.java:2719)atjava.awt.Component.dispatchEvent(Component.java:4687)atjava.awt.EventQueue.dispatchEventImpl(EventQueue.java:729)atjava.awt.EventQueue.access$200(EventQueue.java:103)atjava.awt.EventQueue$3.run(EventQueue.java:688)atjava.awt.EventQueue$3.run(EventQueue.java:686)atjava.security.AccessController.doPrivileged(NativeMethod)atjava.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)atjava.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)atjava.awt.EventQueue$4.run(EventQueue.java:702)atjava.awt.EventQueue$4.run(EventQueue.java:700)atjava.security.AccessController.doPrivileged(NativeMethod)atjava.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)atjava.awt.EventQueue.dispatchEvent(EventQueue.java:699)atjava.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)atjava.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)atjava.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)atjava.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)atjava.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)atjava.awt.EventDispatchThread.run(EventDispatchThread.java:91)