【发布时间】:2016-11-30 05:45:30
【问题描述】:
我想为java制作安全的聊天程序。 我输入了一些消息,但它会产生诸如 InvalidKeyException 之类的错误。 请解决它。谢谢!
这是错误信息!
=== RSA 加密 === java.security.InvalidKeyException: 没有安装的提供程序支持此密钥: (null) at javax.crypto.Cipher.chooseProvider(Cipher.java:893) 在 javax.crypto.Cipher.init(Cipher.java:1249) 在 javax.crypto.Cipher.init(Cipher.java:1186) 在 Crypto.RSACryption.encryptMessage(RSACryption.java:28) 在 Chat.Client.sendEncryptMessage(Client.java:236) 在 Chat.ClientGUI.actionPerformed(ClientGUI.java:191) 在 javax.swing.JTextField.fireActionPerformed(未知来源)在 javax.swing.JTextField.postActionEvent(未知来源)在 javax.swing.JTextField$NotifyAction.actionPerformed(未知来源) 在 javax.swing.SwingUtilities.notifyAction(Unknown Source) 在 javax.swing.JComponent.processKeyBinding(未知来源)在 javax.swing.JComponent.processKeyBindings(未知来源)在 javax.swing.JComponent.processKeyEvent(未知来源)在 java.awt.Component.processEvent(未知来源)在 java.awt.Container.processEvent(未知来源)在 java.awt.Component.dispatchEventImpl(未知来源)在 java.awt.Container.dispatchEventImpl(未知来源)在 java.awt.Component.dispatchEvent(未知来源)在 java.awt.KeyboardFocusManager.redispatchEvent(未知来源)在 java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(未知来源) 在 java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(未知 来源)在 java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(未知 来源)在 java.awt.DefaultKeyboardFocusManager.dispatchEvent(未知 源)在 java.awt.Component.dispatchEventImpl(未知源)在 java.awt.Container.dispatchEventImpl(未知来源)在 java.awt.Window.dispatchEventImpl(未知来源)在 java.awt.Component.dispatchEvent(未知来源)在 java.awt.EventQueue.dispatchEventImpl(未知来源)在 java.awt.EventQueue.access$500(未知来源)在 java.awt.EventQueue$3.run(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) 在 java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(未知 来源)在 java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(未知 源)在 java.awt.EventQueue$4.run(未知源)在 java.awt.EventQueue$4.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) 在 java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(未知 源)在 java.awt.EventQueue.dispatchEvent(未知源)在 java.awt.EventDispatchThread.pumpOneEventForFilters(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForFilter(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(未知 来源)在 java.awt.EventDispatchThread.pumpEvents(未知来源) 在 java.awt.EventDispatchThread.pumpEvents(Unknown Source) 在 java.awt.EventDispatchThread.run(未知来源)
这里是 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;
}
【问题讨论】:
-
你应该学习如何调试你的代码。错误明确指出
publicKey为空?
标签: java encryption rsa