Question

Y at-il un moyen d'utiliser les clés RSA que j'ai généré avec l'API du Crypto dans OpenSSL? Ce que je cherche est un moyen de stocker les clés dans un format que les deux Crypto ++ et OpenSSL peuvent facilement les ouvrir.

J'écris un régime d'autorisation et je veux vérifier les signatures et décrypter des fichiers en utilisant l'API de Crypto, mais pour générer les fichiers de licence, je voudrais utiliser une interface web (probablement en utilisant PHP, qui ne supporte que OpenSSL) pour générer et chiffrer / signer les licences.

Je voudrais écrire des applications utilisant Crypto ++ et l'appeler à partir du PHP, mais la clé privée sera stockée sous une forme cryptée, un mot de passe doit être transmis à l'application et en passant sur la ligne de commande ne semble pas être une bonne idée pour moi.

Était-ce utile?

La solution

Les deux Crypto ++ et OpenSSL peuvent gérer PKCS # 8 touches codées. En Crypto ++, vous pouvez générer des clés et convertir en PKCS # 8 tampon comme celui-ci,

AutoSeededRandomPool rng;
RSAES_OAEP_SHA_Decryptor priv(rng, 2048);
string der;
StringSink der_sink(der);
priv.DEREncode(der_sink);
der_sink.MessageEnd();

// der.data() is the bytes you need

Maintenant, vous avez juste besoin de passer les octets à PHP. Vous pouvez enregistrer dans un fichier, envoyer dans un message.

La seule Gotcha est que l'interface OpenSSL de PHP accepte uniquement PEM codé PKCS # 8. Vous pouvez facilement convertir tampon codé DER en PEM comme celui-ci en PHP,

<?php
function pkcs8_to_pem($der) {

    static $BEGIN_MARKER = "-----BEGIN PRIVATE KEY-----";
    static $END_MARKER = "-----END PRIVATE KEY-----";

    $value = base64_encode($der);

    $pem = $BEGIN_MARKER . "\n";
    $pem .= chunk_split($value, 64, "\n");
    $pem .= $END_MARKER . "\n";

    return $pem;
}
?>

Vous pouvez également convertir PKCS # 8 à PEM en C ++ si vous préférez. L'algorithme est très simple que vous pouvez voir à partir du code PHP.

OpenSSL est aujourd'hui si répandue. Je ne vois aucune raison d'utiliser Crypto ++ pour les applications courantes comme crypto cela.

Autres conseils

  

Y at-il un moyen d'utiliser les clés RSA que j'ai généré avec l'API du Crypto dans OpenSSL? Ce que je cherche est un moyen de stocker les clés dans un format que les deux Crypto ++ et OpenSSL peuvent facilement les ouvrir.

Oui. En plus de X.509 et PKCS # 8 clés codées (la réponse de ZZ Coder), vous pouvez également utiliser des clés codées PEM y compris les clés cryptées. Prise en charge des clés codées PEM a été donnée au projet en Juillet 2014 pour Interop OpenSSL.

Pour utiliser les touches codées PEM, vous devez chercher le Crypto ++ PEM Emballez et recompiler le bibliothèque. Le pack PEM ne fait pas partie de la bibliothèque de l'Crypto comme il est prévu par Wei Dai au site de Crypto .

Une fois que vous installez et recompiler, est aussi simple que:

// Load a RSA public key
FileSource fs1("rsa-pub.pem", true);
RSA::PublicKey k1;
PEM_Load(fs1, k1);

// Load a encrypted RSA private key
FileSource fs2("rsa-enc-priv.pem", true);
RSA::PrivateKey k2;
PEM_Load(fs2, k2, "test", 4);

// Save an EC public key
DL_PublicKey_EC<ECP> k16 = ...;
FileSink fs16("ec-pub-xxx.pem", true);
PEM_Save(fs16, k16);

// Save an encrypted EC private key
DL_PrivateKey_EC<ECP> k18 = ...;
FileSink fs18("ec-enc-priv-xxx.pem", true);
PEM_Save(fs18, k18, "AES-128-CBC", "test", 4);

Les touches ressemblent donc sur disque:

$ cat rsa-pub.pem
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCg7ovcljEjZCFOdLWENBKE6FSk
Nke6OP79SMJABJw+JoEBpNddK6/v99IvA1qU76V0V4k8qLvhkVUtk9FArhhRsxeF
1fd8UVqgsT8j0YCVFcJ/ZA372ogpXyvc5aK9mZEiKE5TIF8qnDFFZiMWPrad1buk
hg+eFdo78QRLA5plEQIDAQAB
-----END PUBLIC KEY-----
$  
$ cat rsa-enc-priv.pem
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,E1A759E11CA515CE34B6E8CE5278C919

slMx02TMblahTedEKsfS+qYYo4nZFaqI3PhCRYmE5zUa9clHm7yo36wIk3oo52OB
f4AhOaJwiPQAbLe/kDHeP77iHd/4+hFNq/Haj6ahWRpXilLVOETLtefbzSGO8va3
ORnwQpPThs2V0EetPU3LB3QcA/XRjWDzyNa7+LydOjKwbQdZnF/jND5NCkEkncNM
iQJ1VWubN+Xs3Rx0CfLu5Chl1n7WnmCNMtLL/LtYeaR1SlRJa6BaF7hNHJJJ3+Jc
8curCKlpobs+XnlDfjyqgTXolkiepn95TnT7KSqi3BqVEpq/5LKMnkDJg6nwUR7A
w0jLNr1f8adWyBEj2Dp0D/jy8eDh65eHdJw4s8G5FZfBud1zWbvRQ3Ah70ISUKa3
4q/6z2vervPgoc+rMVYDvRf/mqa4LMXYhuygsyx50OgPldCC2d0cVVFCg/ljdEzO
UV5rSkK1Qczv8Nc1ZdY3fJA+qYIV8JqPPY+dJ2312R+myPi5Av0/69k8lZN5eIJk
SkiiFQmabhc+o6z4RFA52a3lOud3eGM9L5nbFQGc5COzQVZ6y8t06tLIp9Y5zjA4
KTgNncV5eq3Bau+cWXjP6pJRixFVfwIoy95mAur7B2P1iE4FXyZbvCovPL6vilT5
kSqAo7Znu0RpTjE36tWY6tFt+GU7k8EBrjA3Qi+8xxqyYtr57Ns+H/j+hhJTN8L7
IXoevwS81OPiB0Dmg6wLLXATG1+gCNXb8sd5U2eJhy4LOJA3y54CTgRnPXtM38CH
K+JvnDstyUl9IGTsgUz51ZzyJNZGU9Ro3pt/a3Cs5IJumaygZ0LQ44WBw9m/vja9
-----END RSA PRIVATE KEY-----
$  
$ cat ec-pub.pem
-----BEGIN PUBLIC KEY-----
MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEVwXjdIb2yy25QbIO0XiIHpySXwSpIAcz
v0Wdyq+fZ6BdJjs2jKvbs9pcRJn8yxlASWoz2R4NoHTZ2YokKsDfEg==
-----END PUBLIC KEY-----
$  
$ cat ec-enc-priv.pem
-----BEGIN EC PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,F1DBC73E26DCD310888932C2762B3512

nikex48SFvtNOIrOEDipwmxaghjn4jtrvwI3d1H/VNq9yp26WqFZxBJCUPFBFLjH
auA+AHeUo3BVkNQPs0VO4FD5xR50mtc2tCJizzhyTTTypLc3lRkxmD1MpeZnWRy2
70foVtNSvLL/QLJqNJGm/G9kl0xPN4zAfOq7Txoscnk=
-----END EC PRIVATE KEY-----

Related: pour d'autres utiles patchs ++ Crypto, consultez le sur la wiki Crypto.

Essayez ce lien: http://www.cryptopp.com/fom-serve/cache/62. html

Il semble que vous aurez besoin d'utiliser PKCS # 8 et convertir DER au format PEM pour pouvoir utiliser les touches dans OpenSSL. Je ne sais pas si vous serez en mesure d'utiliser un seul fichier pour les deux.

Je ne l'ai utilisé OpenSSL donc je ne suis pas sûr de ce que les options que vous avez avec Crypto ++. J'ai trouvé le lien ci-dessus en effectuant une recherche Google pour ces termes:. Crypto ++ RSA OpenSSL

DER est le format binaire OpenSSL pour les clés et les certificats.

PEM est le format de texte OpenSSL.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top