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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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