web-dev-qa-db-fra.com

Comment convertir de String en PublicKey?

J'ai utilisé le code suivant pour convertir la clé publique et privée en chaîne

KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
keyPairGen.initialize(2048);
KeyPair          keyPair    = keyPairGen.genKeyPair();
PublicKey        publicKey  = keyPair.getPublic();
PrivateKey       privateKey = keyPair.getPrivate();
String publicK = Base64.encodeBase64String(publicKey.getEncoded());
String privateK = Base64.encodeBase64String(privateKey.getEncoded());

J'essaie maintenant de le reconvertir en clé publique et privée

PublicKey publicDecoded = Base64.decodeBase64(publicK);

Je reçois une erreur de ne peut pas convertir d'octet [] en clé publique. J'ai donc essayé comme ça

PublicKey publicDecoded = new SecretKeySpec(Base64.decodeBase64(publicK),"RSA");

Cela conduit à une erreur comme ci-dessous

Java.security.spec.InvalidKeySpecException: Java.security.InvalidKeyException: Neither a public nor a private key

On dirait que je fais une mauvaise conversion de clé ici. Toute aide serait appréciée.

13
The Coder

Je ne pense pas que vous pouvez utiliser le SecretKeySpec avec RSA.

Cela devrait faire:

byte[] publicBytes = Base64.decodeBase64(publicK);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey pubKey = keyFactory.generatePublic(keySpec);

Et pour décoder l'usage privé PKCS8EncodedKeySpec

30
weston