2014-06-28 3 views
0

J'ai une application C, dans cette application que je produis une paire de clés RSA avec le code suivant (vérification d'erreurs gauche en raison de la lisibilité):Comment générer une clé RSA dans Android semblable à une clé générée OpenSSL PEM_write_PUBKEY

void generateKeyPair(char* pass) { 
    EVP_PKEY *pkey = NULL; 
    RSA* r; 

    OpenSSL_add_all_algorithms(); 
    RAND_load_file("/dev/urandom", 1024); 

    r = RSA_generate_key(KEY_LENGTH, RSA_F4, NULL, NULL); 

    pkey = EVP_PKEY_new(); 
    EVP_PKEY_assign_RSA(pkey, r); 

    FILE* fp = fopen("private.key", "w"); 
    PEM_write_PrivateKey(fp, pkey, EVP_aes_256_cbc(), NULL, 0, NULL, pass); 
    fclose(fp); 

    fp = fopen("public.key", "w"); 
    PEM_write_PUBKEY(fp, pkey); 
    fclose(fp); 
} 

Je synchronise les clés publiques PEM via un serveur entre les périphériques. Maintenant, je dois écrire une application Android compatible mais je dois générer la clé publique dans le même format que PEM_write_PUBKEY.

Je sais que j'aurais dû faire la synchronisation au format DER ou quelque chose mais maintenant je ne peux plus changer de design. Il n'y a aucun moyen de générer les clés dans le format similaire.

Je suppose que c'est une clé encodée # PCKS1 base64 mais je ne suis pas sûr et je ne sais pas comment générer un similaire dans Android - Androids standard est # PCKS8. Cependant, je préférerais ne pas inclure le château spongieux dans mon projet s'il y a un moyen de contourner le problème.

+0

PKCS # 8 est pour les clés privées. –

Répondre

0

Vous avez de la chance; il semble que vous ayez seulement à encoder PEM votre clé publique car Java et OpenSSL utilisent la même structure utilisée pour les certificats X5.09. Vous pouvez y accéder en exécutant RSAPublicKey.encode().

Malheureusement, je ne connais aucune autre bibliothèque qui effectue le codage PEM, mais je suis sûr que vous pouvez supprimer le code de Bouncy ou Spongy si nécessaire; les bibliothèques de Bouncy Castle ont une structure de licence très libérale.

Questions connexes