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.
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