Récupérer clé publique openssl
Bonjour,
J'ai une problématique de cryptage via open SSL en PHP et VB.NET
Un bout de code valant mieux qu'un long discours ...
Génération des clés Publique et Prive en PHP
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| // 1024 bit rsa private key
$privateKey = openssl_pkey_new(array(
'private_key_bits' => 1024,
'private_key_type' => OPENSSL_KEYTYPE_RSA,
));
// sauvegarde de la clé privé
openssl_pkey_export_to_file($privateKey, 'privateKey');
// Clé publique
$keyDetails = openssl_pkey_get_details($privateKey);
// Sauvegarde clé publique
file_put_contents('publicKey', $keyDetails['key']); |
En résultat pour la clé publique j'ai dans le fichier
Code:
1 2 3 4 5 6
| -----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNAD ..... k4Z7ppiVaPPBn
s/36sdY12F/AX .... pQIYJXqY9kE5u3ZG8Oy0wl9
PA0pjGeZ ..... O/B0t+ETenrAtYONiGKE/f6d9F
RBAUKU32pTs4B9FzQwIDAQAB
-----END PUBLIC KEY----- |
Ou cela se complique c'est en VB.NET. J'ai essayé ce code mais hélas sans succès. Pas d'erreur au cryptage mais au décryptage en PHP pas de résultats.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
Dim sReader As String = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNAD ..... k4Z7ppiVaPPBn ........ RBAUKU32pTs4B9FzQwIDAQAB"
Dim PublicKey As Byte() = Encoding.UTF8.GetBytes(sReader)
Dim Exponent As Byte() = {1, 0, 1}
'Create a new instance of RSACryptoServiceProvider.
Dim RSA As New RSACryptoServiceProvider()
'Create a new instance of RSAParameters.
Dim RSAKeyInfo As New RSAParameters()
'Set RSAKeyInfo to the public key values.
RSAKeyInfo.Modulus = PublicKey
RSAKeyInfo.Exponent = Exponent
'Import key parameters into RSA.
RSA.ImportParameters(RSAKeyInfo)
'Create a UnicodeEncoder to convert between byte array and string.
Dim ByteConverter As New UnicodeEncoding()
'Create byte arrays to hold original, encrypted, and decrypted data.
bytCipherText = ByteConverter.GetBytes("Data to Encrypt")
bytCipherText = RSA.Encrypt(bytPlainText, False)
sEncrypt = Convert.ToBase64String(bytCipherText) |
Aucune erreur cela crypte bien, sauf que lors du decrytage en PHP aucun résultats (la variable $sensitiveData2 est vide) et pas de message d'erreur !
Code:
1 2
| $privateKey = openssl_pkey_get_private('file://privateKey');
openssl_private_decrypt(base64_decode($encryptedData1), $sensitiveData2, $privateKey); |
Pour le test je copie dans la variable PHP $encryptedData1 le contenu de la variable VB sEncrypt.
Toutes informations pouvant m'aider est la bienvenue !
Entre autre sur comment avoir un échange sécurisé entre PHP et .NET via openssl.
Merci