J'ai généré une clé privée avec:
openssl genrsa [-out file] –des3
Après cela, j'ai généré une clé publique avec:
openssl rsa –pubout -in private.key [-out file]
Je souhaite signer certains messages avec ma clé privée et vérifier d'autres messages avec ma clé publique, en utilisant un code comme celui-ci:
public String sign(String message) throws SignatureException{
try {
Signature sign = Signature.getInstance("SHA1withRSA");
sign.initSign(privateKey);
sign.update(message.getBytes("UTF-8"));
return new String(Base64.encodeBase64(sign.sign()),"UTF-8");
} catch (Exception ex) {
throw new SignatureException(ex);
}
}
public boolean verify(String message, String signature) throws SignatureException{
try {
Signature sign = Signature.getInstance("SHA1withRSA");
sign.initVerify(publicKey);
sign.update(message.getBytes("UTF-8"));
return sign.verify(Base64.decodeBase64(signature.getBytes("UTF-8")));
} catch (Exception ex) {
throw new SignatureException(ex);
}
}
J'ai trouvé une solution pour convertir ma clé privée au format PKCS8 et la charger. Cela fonctionne avec un code comme celui-ci:
public PrivateKey getPrivateKey(String filename) throws Exception {
File f = new File(filename);
FileInputStream fis = new FileInputStream(f);
DataInputStream dis = new DataInputStream(fis);
byte[] keyBytes = new byte[(int) f.length()];
dis.readFully(keyBytes);
dis.close();
PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory kf =
KeyFactory.getInstance("RSA");
return kf.generatePrivate(spec);
}
Et enfin ma question est: comment charger ma clé publique RSA à partir d'un fichier?
Je pense que je dois peut-être convertir mon fichier de clé publique au format x509 et l'utiliser X509EncodedKeySpec
. Mais comment puis-je faire ça?
Réponses:
Ci - dessous les informations pertinentes du lien qui Zaki a fourni.
Clé privée
Clé publique
la source
InvalidKeyException
quand j'ai essayé avec des fichiers que j'ai générés avec lassh-keygen -t rsa -b 2048
commande. Avec les fichiers générés avec les commandes de la solution, cela a fonctionné..pem
format au lieu de.der
, vous pouvez utiliser la classe PemReader de BouncyCastle pour l'analyser avant de la transmettreX509EncodedKeySpec
. N'oubliez pas de spécifier également le fournisseur BouncyCastle lorsque vous créez l'instance KeyFactory.Ce programme fait presque tout avec des clés publiques et privées. Le format der peut être obtenu mais en sauvegardant les données brutes (sans encodage base64). J'espère que cela aide les programmeurs.
la source
Une fois votre clé stockée dans un fichier PEM, vous pouvez la relire facilement à l'aide des classes PemObject et PemReader fournies par BouncyCastle, comme indiqué dans ce tutoriel .
Créez une classe PemFile qui encapsule la gestion des fichiers:
Puis instanciez les clés privées et publiques comme d'habitude:
J'espère que cela t'aides.
la source
Le code ci-dessous fonctionne parfaitement pour moi et fonctionne. Ce code lira la clé privée et publique RSA via le code java. Vous pouvez vous référer à http://snipplr.com/view/18368/
la source