[WD26] Utilisation assemblage/package dotnet (.net) BouncyCastle.Cryptography
Bonjour,
Je dois utiliser cet assemblage (dispo ici)
Méthode: RSA 3072 + OAEP SHA512
J'ai créé un nouveau projet en WD26 pour faire un POC. J'ai copié dans le répertoire EXE du projet et j'ai importer la package dans le projet, jusque là ras. J'ai aussi ajouter l'assemblage "System"
J'ai du code exemple en C# donc j'ai créé une collection de procédures globale pour pouvoir saisir du code C# dans Windev. J'ai vu sur le forum de PcSoft que les "using" sont globaux à toute la collection j'ai donc créé ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.OpenSsl;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Generators;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Crypto.Encodings;
using Org.BouncyCastle.Crypto.Engines;
using Org.BouncyCastle.Crypto.Digests;
public static void JustForUsing()
{
} |
Il se peut qu'il y est trop de "using" déclarer, mais je ne suis pas un fin connaisseur je laisse tout.
Et là 1ère de compilation :
- Erreur : error CS0234: Le type ou le nom d'espace de noms 'Linq' n'existe pas dans l'espace de noms 'System' (une référence d'assembly est-elle manquante*?) CSharp.JustForUsing, Procédure locale, ligne 6, colonne 14
- Erreur : error CS0234: Le type ou le nom d'espace de noms 'Tasks' n'existe pas dans l'espace de noms 'System.Threading' (une référence d'assembly est-elle manquante*?) CSharp.JustForUsing, Procédure locale, ligne 8, colonne 24
En utilisant l'option de menu "Réparer le projet" tout rentre dans l'ordre mais c'est agaçant car cela revient à chaque modification de code !!!!
Ensuite je crée ma 1ère procédure :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
public static string cs_encrypt(string _publicKey, string _message)
{
// Chargement de la clé publique
AsymmetricKeyParameter publicKey;
PemReader pemReader = new PemReader(new StringReader(_publicKey));
publicKey = (AsymmetricKeyParameter)pemReader.ReadObject();
// Préparation du moteur RSA avec OAEP + SHA-512
var oaep = new OaepEncoding(
new RsaEngine(),
new Sha512Digest(), // Digest principal
new Sha512Digest(), // MGF1 digest
null // Label (optionnel)
);
// Initialisation du moteur en mode chiffrement
oaep.Init(true, publicKey);
// Message à chiffrer
string message = _message;
byte[] inputBytes = Encoding.UTF8.GetBytes(message);
// Chiffrement
byte[] encryptedBytes = oaep.ProcessBlock(inputBytes, 0, inputBytes.Length);
string encryptedBase64 = Convert.ToBase64String(encryptedBytes);
// Retour du résultat
return encryptedBase64;
} |
Je fais un test et tout est OK , j'obtiens bien une chaine cryptée, je la passe dans l'outil que ma fournit mon presta externe et j'arrive à la décryptée
Maintenant je souhaite, même si je n'en pas besoin réellement, faire la partie décryptage, seulement j'ai une erreur de compilation dans le code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
public static string cs_decrypt(string _privateKey, string _message)
{
// Chargement de la clé privée
AsymmetricKeyParameter privateKey;
PemReader pemReader = new PemReader(new StringReader(_privateKey));
object keyObject = pemReader.ReadObject();
if (keyObject is AsymmetricCipherKeyPair keyPair) //----------------------------------------> erreur
privateKey = keyPair.Private;
else if (keyObject is AsymmetricKeyParameter keyParam) //--------------------------------> erreur
privateKey = keyParam;
else //-------------------------------------------------------------------------------------------> erreur
throw new InvalidOperationException("Clé privée non reconnue.");
// Préparation du moteur RSA avec OAEP + SHA-512
var oaep = new OaepEncoding(
new RsaEngine(),
new Sha512Digest(), // Digest principal
new Sha512Digest(), // MGF1 digest
null // Label (optionnel)
);
// Initialisation du moteur en mode déchiffrement
oaep.Init(false, privateKey);
// Message à déchiffrer
string encryptedBase64 = _message;
byte[] encryptedBytes = Convert.FromBase64String(encryptedBase64);
// Chiffrement
byte[] decryptedBytes = oaep.ProcessBlock(encryptedBytes, 0, encryptedBytes.Length);
string decryptedMessage = Encoding.UTF8.GetString(decryptedBytes);
// Retour du résultat
return decryptedMessage;
} |
Si qq'un a une idée je suis preneur.
exemple de clé publique :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
-----BEGIN PUBLIC KEY-----
MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA1HFPdY8oJ6jVW1DDJkZA
TkXriD6EUxfdrA0d/vea3NJVunOMwM4ZTp7ycWcThRNFdIRSIrxd/dDQwmRRokdY
zfb3SGMrLuL5ErNRmVA/4+fmZ1y5xeerePPXTtHVehBBjSuZ8op6jwx0tHIyQzr2
vOxgjBXyfmZBWQ+rzPTYZwokLcv5pxkkq55JZTNW7k+8kDw3paLvMBfsyBELKcVI
Gg3MMWiDIDOPIFOO1K1ppY3+KOT0tD4flBHwf0O/86pdm+nSlG4r4bkqjIIJwv7A
Wh6k5VwgS8TcsavzarNhTYBAWQoQr4JEQepXCLx2k/r14lKFyzu4+/eFhwF1CQ26
jmRlp0Lo2u3RQanVMsshfLh54ET2Fj3nX3cSTHxWbR3E1knI9A1qlpoElElNpBAG
JePN22H09pT6qwlBcPaSkIrf/9SNp1n5hY76gEV9fzo6OlbEZQ3V5uD0OY0EzVCn
dcvRslDiWqzCZjKylk93rIzxFrYAFq9G4luhpg/slVcTAgMBAAE=
-----END PUBLIC KEY----- |
et sa clé privée:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY----- |
Merci