[ Toxter @ 24.08.2005. 22:32 ] @
Kao sto vidite u naslovu.
Zna li neko kako da napravim PublicKey (ili Key pa bih ga cast-ovao) od
niza bajtova koji pretstavljaju public key modulus?
(takodje imam i exponent u formi niza bajtova ako je potrebno).
[ djuzoran @ 25.08.2005. 08:00 ] @
... mislim da ti ovo resava stvar...

X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(readFromFile(pubFilePath));
KeyFactory keyFact = KeyFactory.getInstance(keyPairType);
publicKey = keyFact.generatePublic(x509KeySpec);



public static byte[] readFromFile(String filePath) throws Throwable {
FileInputStream in = null;
ByteArrayOutputStream bout = null;
try {
bout = new ByteArrayOutputStream();
in = new FileInputStream(filePath);
int c;
while ((c = in.read()) != -1)
bout.write(c);
return bout.toByteArray();
} finally {
in.close();
bout.close();
}
}
[ Toxter @ 25.08.2005. 12:01 ] @
@djuzoran:
To ne radi pokusao sam i ja to pre nego sto sam postavio ovde pitanje.
Evo koje exception-e dobijam kada to primenim:
Code:
java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException: DerInputStream.getLength(): lengthTag=48, too big.
    at sun.security.rsa.RSAKeyFactory.engineGeneratePublic(RSAKeyFactory.java:163)
    at java.security.KeyFactory.generatePublic(KeyFactory.java:284)
    at paket1.Tessssttt.main(Tessssttt.java:159)
Caused by: java.security.InvalidKeyException: IOException: DerInputStream.getLength(): lengthTag=48, too big.
    at sun.security.x509.X509Key.decode(X509Key.java:380)
    at sun.security.x509.X509Key.decode(X509Key.java:386)
    at sun.security.rsa.RSAPublicKeyImpl.<init>(RSAPublicKeyImpl.java:65)
    at sun.security.rsa.RSAKeyFactory.generatePublic(RSAKeyFactory.java:256)
    at sun.security.rsa.RSAKeyFactory.engineGeneratePublic(RSAKeyFactory.java:159)
    ... 2 more


Da pojasnim. Niz je od 128 bajtova (1024bitni kljuc) koji pretstavljaju RSA PublicKey modulus(ako treba mogu da ga paste-ujem ali to je jednostavno byte[] koji ima 128 elemenata).
PublicKey exponent je drugi niz bajtova. Evo primer kako izgleda exponent:
Code:
byte[] exp = {(byte)0x01, (byte)0x00, (byte)0x01};



[Ovu poruku je menjao Toxter dana 25.08.2005. u 13:05 GMT+1]
[ Toxter @ 26.08.2005. 13:02 ] @
Resio sam problem.
Evo kod ako nekome nekad zatreba:
Code:

      KeyFactory kfac = KeyFactory.getInstance("RSA");
      BigInteger modulus = new BigInteger(bPubKey);
      BigInteger exponent = new BigInteger(bExp);
           
      RSAPublicKeySpec kspec1 = new RSAPublicKeySpec(modulus, exponent);
      PublicKey pk = kfac.generatePublic(kspec1);


Pozdrav!