Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

private key von bestehendem file genereiren

0 views
Skip to first unread message

Carla Schaffner

unread,
Oct 9, 2003, 7:53:04 AM10/9/03
to
Hi

ich möchte aus einem existierenden file einen private key erzeugen, haber
folgendes versucht, gab jedoch immer eine Exception.


---------Code--------------

FileInputStream keyfis = new FileInputStream("keyCarlaSchaffner.pem");
//"keyCarlaSchaffner.der"
byte[] encKey = new byte[keyfis.available()];
keyfis.read(encKey);
keyfis.close();

X509EncodedKeySpec privKeySpec = new X509EncodedKeySpec(encKey);

KeyFactory kf = KeyFactory.getInstance("RSA");
PrivateKey pk = kf.generatePrivate(privKeySpec);

---------Code end ----------

habe es mit dem der und pem codierten private key file versucht, doch es
funktionierte beides nicht.

PEM :

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,F836EA29BA0C7925

....
...
...
-----END RSA PRIVATE KEY-----

DER: nicht lesbar

die exception ist:
--------------------------------

java.security.spec.InvalidKeySpecException: Key spec not RSA.
at
com.sun.net.ssl.internal.ssl.JSA_RSAKeyFactory.getPrivateKeyData(DashoA6275)
at
com.sun.net.ssl.internal.ssl.JS_KeyFactory.engineGeneratePrivate(DashoA6275)
at java.security.KeyFactory.generatePrivate(KeyFactory.java:237)
--------------------------------

hat jemand eine idee?

viel dank
carla

Andreas Jaeger

unread,
Oct 10, 2003, 4:13:37 PM10/10/03
to
Carla Schaffner wrote:
> Hi
>
> ich möchte aus einem existierenden file einen private key erzeugen, haber
> folgendes versucht, gab jedoch immer eine Exception.
> >
> FileInputStream keyfis = new FileInputStream("keyCarlaSchaffner.pem");
> //"keyCarlaSchaffner.der"
> byte[] encKey = new byte[keyfis.available()];
> keyfis.read(encKey);
> keyfis.close();

Ich schicke voraus, dass ich mit den Interna des Key-Erzeugens nicht
vertraut bin. Ob und wie man aus der .pem-Datei einen privaten Schlüssel
extrahiert, ist mir gänzlich unbekannt. Offenbar steckt da ja schon der
private key drin. Jedenfalls sieht Dein Code so ähnlich aus wie das, was
in KeyFactory als Beispiel gegeben ist, vertrauen wir also darauf.

> X509EncodedKeySpec privKeySpec = new X509EncodedKeySpec(encKey);
>
> KeyFactory kf = KeyFactory.getInstance("RSA");
> PrivateKey pk = kf.generatePrivate(privKeySpec);

[...]

> die exception ist:
> --------------------------------
>
> java.security.spec.InvalidKeySpecException: Key spec not RSA.
> at
> com.sun.net.ssl.internal.ssl.JSA_RSAKeyFactory.getPrivateKeyData(DashoA6275)
> at
> com.sun.net.ssl.internal.ssl.JS_KeyFactory.engineGeneratePrivate(DashoA6275)
> at java.security.KeyFactory.generatePrivate(KeyFactory.java:237)
> --------------------------------

Nun scheint die interne RSA-KeyFactory den Key ja zu beanstanden. Also
ist tatsächlich entweder das Format nicht lesbar, oder es wird falsch
eingelesen. Bei dem Einlesen machst Du auch tatsächlich einen Fehler.
Auf available() kann man sich nie verlassen, d.h. es ist nicht klar,
ob immer alle bytes ohne I/O-Blocking verfügbar sind. Womöglich gibt
die Methode immer 0 zurück aus Faulheit. Wenn überhaupt, würde
hier File.length() hinpassen. Desweiteren liest die Methode read(byte[])
nicht das komplette Array voll, sondern soweit es gerade paßt. Die
Anzahl gelesener Bytes wird durch die Methode zurückgegeben. Dir bleibt
nichts übrig, als eine entsprechende Schleife zu programmieren. Die ist
schon häufig in der NG gepostet worden. Womöglich gibt es den 4Zeiler
mittlerweile auch in der API als Methode.

Andreas
--
---------------------------------------------
Andreas Jaeger
http://afi.uni-muenster.de
AFI - Institut für Agrar- und Forstinformatik
an der Universität Münster
---------------------------------------------

0 new messages