Загрузка ранее сохраненных ключей не удалась в BouncyCastle с JavaJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Загрузка ранее сохраненных ключей не удалась в BouncyCastle с Java

Сообщение Anonymous »

Я создаю ключ RSA на Java с помощью Bouncy Castle. Я сохраняю этот ключ в файле PKCS1 и хочу загрузить этот файл в другую часть программы обратно в объект файла ключа.
Мое хранилище ключей:
public static void writeKey(PemObject obj, String filename) throws IOException {
try (JcaPEMWriter pemWriter = new JcaPEMWriter(new FileWriter(filename)))
{
pemWriter.writeObject(obj);
pemWriter.close();
} catch (IOException ex) {
Logger.getLogger(Conversion.class.getName()).log(Level.SEVERE, null, ex);
}
}

Я конвертирую объект KeyPair с помощью:
public static PemObject createPrivateObject(KeyPair key) throws Exception {
return new PemObject("RSA PRIVATE KEY", key.getPrivate().getEncoded());
}

Это экспортируется в файл, который на первый взгляд выглядит хорошо. OpenSSL может читать этот файл и показывать информацию о значениях ключа.
Однако позже я пытаюсь загрузить ключ из файла с помощью:
public static KeyPair readKeyPair(String path)
{
File privateKeyFile = new File(path);
try (PEMParser pemParser = new PEMParser(new FileReader(privateKeyFile))){

Object object = pemParser.readObject();
KeyPair kp;
JcaPEMKeyConverter converter = new JcaPEMKeyConverter();
kp = converter.getKeyPair((PEMKeyPair) object);
pemParser.close();
return kp;

} catch (FileNotFoundException ex) {
Logger.getLogger(Crypto.class.getName()).log(Level.SEVERE, null, ex);
} catch (PEMException ex) {
Logger.getLogger(Crypto.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Crypto.class.getName()).log(Level.SEVERE, null, ex);
}
return null;


Когда я пытаюсь это сделать, я получаю сообщение об ошибке
org.bouncycastle.openssl.PEMException: malformed sequence in RSA private key

(Полное сообщение после текста)
Когда я еще раз взглянул на OpenSSl, я увидел, что OPENSSL напечатал в конце разные значения для одного и того же ключа. ,
ключ в файле начинается с
-----BEGIN RSA PRIVATE KEY-----
MIIEugIBADAN[...]

Выходы OpenSSL
openssl rsa -text -in Userkey.pem

Private-Key: (2048 bit)
modulus:
[...]
writing RSA key
-----BEGIN RSA PRIVATE KEY-----
MIIEoAIBAAKC[...]

для ключевого файла, созданного и сохраненного, как описано выше. Если я попытаюсь вручную скопировать выходные данные OpenSSL в файл и загрузить его с помощью своей программы, все будет работать нормально. Итак, я предполагаю, что что-то не так в подпрограмме writeKey, но я не могу понять, что в этом не так. Кто-нибудь это знает?
Полное сообщение об ошибке:
org.bouncycastle.openssl.PEMException: m a l f o r m e d s e q u e n c e i n R S A p r i v a t e k e y < b r / > a t o r g . b o u n c y c a s t l e . o p e n s s l . P E M P a r s e r $ K e y P a i r P a r s e r . p a r s e O b j e c t ( U n k n o w n S o u r c e ) < b r / > a t o r g . b o u n c y c a s t l e . o p e n s s l . P E M P a r s e r . r e a d O b j e c t ( U n k n o w n S o u r c e ) < b r / > a t c e r t i f i c a t e m a n a g e m e n t . C r y p t o . r e a d K e y P a i r ( C r y p t o . j a v a : 2 5 7 ) < b r / > a t c e r t i f i c a t e m a n a g e m e n t . G u i D e s i g n C o n t r o l l e r . C r e a t e C e r t i f i c a t e P r e s s e d ( G u i D e s i g n C o n t r o l l e r . j a v a : 2 5 0 ) < b r / > a t s u n . r e f l e c t . N a t i v e M e t h o d A c c e s s o r I m p l . i n v o k e 0 ( N a t i v e M e t h o d ) < b r / > a t s u n . r e f l e c t . N a t i v e M e t h o d A c c e s s o r I m p l . i n v o k e ( N a t i v e M e t h o d A c c e s s o r I m p l . j a v a : 6 2 ) < b r / > a t s u n . r e f l e c t . D e l e g a t i n g M e t h o d A c c e s s o r I m p l . i n v o k e ( D e l e g a t i n g M e t h o d A c c e s s o r I m p l . j a v a : 4 3 ) < b r / > a t j a v a . l a n g . r e f l e c t . M e t h o d . i n v o k e ( M e t h o d . j a v a : 4 9 8 ) < b r / > a t s u n . r e f l e c t . m i s c . T r a m p o l i n e . i n v o k e ( M e t h o d U t i l . j a v a : 7 1 ) < b r / > a t s u n . r e f l e c t . G e n e r a t e d M e t h o d A c c e s s o r 1 . i n v o k e ( U n k n o w n S o u r c e ) < b r / > a t s u n . r e f l e c t . D e l e g a t i n g M e t h o d A c c e s s o r I m p l . i n v o k e ( D e l e g a t i n g M e t h o d A c c e s s o r I m p l . j a v a : 4 3 ) < b r / > a t j a v a . l a n g . r e f l e c t . M e t h o d . i n v o k e ( M e t h o d . j a v a : 4 9 8 ) < b r / > a t s u n . r e f l e c t . m i s c . M e t h o d U t i l . i n v o k e ( M e t h o d U t i l . j a v a : 2 7 5 ) < b r / > a t j a v a f x . f x m l . F X M L L o a d e r $ M e t h o d H a n d l e r . i n v o k e ( F X M L L o ader.java:1769)
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Node.fireEvent(Node.java:8411)
at javafx.scene.control.Button.fire(Button.java:185)
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3757)
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:380)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:294)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:416)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:415)
at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
at com.sun.glass.ui.View.notifyMouse(View.java:937)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.bouncycastle.openssl.PEMException: malformed sequence in RSA private key
at org.bouncycastle.openssl.PEMParser$RSAKeyPairParser.parse(Unknown Source)
... 70 more



Подробнее здесь: https://stackoverflow.com/questions/394 ... -with-java
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»