Ich möchte sichere Chat-Programm für Java machen. Ich habe eine Nachricht eingegeben, aber es tritt ein Fehler auf, z. B. InvalidKeyException. bitte lösen Sie es. Vielen Dank!RSA-Verschlüsselung im Chat für Java
es ist eine Fehlermeldung!
=== RSA-Verschlüsselung === java.security.InvalidKeyException: Nein installiert Provider unterstützt diesen Schlüssel: (null) bei javax.crypto.Cipher.chooseProvider (Cipher.java:893) bei javax. crypto.Cipher.init (Cipher.java:1249) um javax.crypto.Cipher.init (Cipher.java:1186) um Crypto.RSACryption.encryptMessage (RSACryption.java:28) um Chat.Client.sendEncryptMessage (Client.java:236) bei Chat.ClientGUI.actionPerformed (ClientGUI.java:191) bei javax.swing.JTextField.fireActionPerformed (Unknown Source) bei javax.swing.JTextField.postActionEvent (Unknown Source) bei javax.swing.JTextField $ NotifyAction.actionPerformed (Unbekannte Quelle) bei javax.swing.SwingUtilities.notifyAction (Unbekannte Quelle) um javax.swing.JComponent.processKeyBinding (Unbekannte Quelle) um javax.swing.JComponent.processKeyBindings (Unknown Source) bei javax.swing.JComponent.processKeyEvent (Unknown Source) bei java.awt.Component.processEvent (Unknown Source) bei java.awt.Container.processEvent (Unknown Source) bei java.awt.Component. dispatchEventImpl (Unknown Source) bei java.awt.Container.dispatchEventImpl (Unknown Source) bei java.awt.Component.dispatchEvent (Unknown Source) bei java.awt.KeyboardFocusManager.redispatchEvent (Unknown Source) bei java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent (Unknown Source) bei java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent (Unbekannt Quelle) bei java.awt.DefaultKeyboardFocusManager.typeAheadAssertions (Unbekannt Quelle) bei java.awt.DefaultKeyboardFocusManager.dispatchEvent (Unbekannt Quelle) bei java.awt.Component.dispatchEventImpl (Unknown Source) bei java.awt.Container.dispatchEventImpl (Unknown Source) bei java.awt.Window.dispatchEventImpl (Unknown Source) bei java.awt.Component.dispatchEvent (Unbekannte Quelle) um java.awt.EventQueue.dispatchEventImpl (unbekannte Quelle) um java.awt.EventQueue.access $ 500 (unbekannte Quelle) um java.awt.EventQueue $ 3.r un (Unknown Source) bei java.awt.EventQueue $ 3.run (Unknown Source) bei java.security.AccessController.doPrivileged (native Methode) bei java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege (Unbekannt Quelle) bei java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege (Unbekannt Quelle) bei java.awt.EventQueue $ 4.run (Unbekannte Quelle) um java.awt.EventQueue $ 4.run (Unbekannte Quelle) um java.security.AccessController.doPrivileged (Native Methode) unter java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege (Unbekannt Quelle) bei java.awt.EventQueue.dispatchEvent (Unbekannte Quelle) um java.awt.EventDispat chThread.pumpOneEventForFilters (Unknown Source) bei java.awt.EventDispatchThread.pumpEventsForFilter (Unknown Source) bei java.awt.EventDispatchThread.pumpEventsForHierarchy (Unbekannt Quelle) bei java.awt.EventDispatchThread.pumpEvents (Unknown Source) auf Java. awt.EventDispatchThread.pumpEvents (Unbekannte Quelle) um java.awt.EventDispatchThread.run (Unknown Source)
Und hier ist der Quelltext der Methode encryptMessage.
public byte[] encryptMessage(String plainText, PublicKey publicKey) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
System.out.print("\n Plaintext : " + plainText + "\n");
byte[] t0 = plainText.getBytes();
for (byte b : t0) System.out.printf("%02X ", b);
System.out.println("\n Plaintext Length : " + t0.length + " byte");
System.out.println("\n=== RSA Encryption ===");
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] b0 = cipher.doFinal(t0);
System.out.print("\n\n Ciphertext : ");
for (byte b : b0) System.out.printf("%02X ", b);
System.out.println("\n Ciphertext Length : " + b0.length + " byte");
return b0;
}
Sie sollten lernen, wie Sie Ihren Code debuggen. Der Fehler besagt eindeutig, dass "publicKey" null ist? –