J'ai une clé publique bse64encodée de source externe (Android Store) et je dois l'utiliser pour vérifier le contenu signé. Comment puis-je convertir la chaîne en une instance de l'interface Java.security.PublicKey. Je suis sur Java 6 si cela fait une différence.
La clé est (probablement) générée à l'aide de la bibliothèque standard Java et non d'un château gonflable (elle provient d'une équipe distante, donc je ne suis pas sûr). Leur exemple de code dit d'utiliser Security.generatePublicKey (base64EncodedPublicKey); mais l'objet de sécurité dans Java standard n'a pas de telle méthode.
Ok pour les sourires ... essayez ceci
Code pour la réponse ci-dessus
public static PublicKey getKey(String key){
try{
byte[] byteKey = Base64.decode(key.getBytes(), Base64.DEFAULT);
X509EncodedKeySpec X509publicKey = new X509EncodedKeySpec(byteKey);
KeyFactory kf = KeyFactory.getInstance("RSA");
return kf.generatePublic(X509publicKey);
}
catch(Exception e){
e.printStackTrace();
}
return null;
}
Essaye ça....
PublicKey getPublicKey(byte[] encodedKey) throws NoSuchAlgorithmException, InvalidKeySpecException
{
KeyFactory factory = KeyFactory.getInstance("RSA");
X509EncodedKeySpec encodedKeySpec = new X509EncodedKeySpec(encodedKey);
return factory.generatePublic(encodedKeySpec);
}
Utiliser un château spongieux
public static PublicKey getPublicKeyFromString(String key) throws Exception {
KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);
org.spongycastle.asn1.pkcs.RSAPublicKey pkcs1PublicKey
= org.spongycastle.asn1.pkcs.RSAPublicKey.getInstance(decodeB64(key));
RSAPublicKeySpec keySpec
= new RSAPublicKeySpec(pkcs1PublicKey.getModulus(), pkcs1PublicKey.getPublicExponent());
PublicKey publicKey = keyFactory.generatePublic(keySpec);
return publicKey;
}