IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

[WD26] Utilisation assemblage/package dotnet (.net) BouncyCastle.Cryptography


Sujet :

WinDev

  1. #1
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 203
    Par défaut [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 CS : 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
    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 CS : 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
    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 CS : 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
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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
    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
    Cordialement JeAn-PhI

  2. #2
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 252
    Par défaut
    Hello,
    pour le premier problème c'est que System.Linq et System.Threading.Tasks se trouve dans l'assemblage System.Core.dll
    et pour le deuxième problème c'est que Windev doit utiliser un compilateur C# inférieur au 7 :

    💡 Problème

    La syntaxe suivante :

    if (keyObject is AsymmetricCipherKeyPair keyPair)

    ➡️ n’est pas supportée avant C# 7.0.
    Le pattern matching (is <Type> variableName) a été introduit dans C# 7.
    C’est pourquoi ton compilateur C# 6 lève une erreur.

    ✅ Solution pour C# 6

    Tu dois simplement séparer le test du cast comme on le faisait avant C# 7 :

    var keyPair = keyObject as AsymmetricCipherKeyPair;
    if (keyPair != null)
    {
    // Ici tu peux utiliser keyPair.Private / keyPair.Public
    }



    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko :zen:

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 203
    Par défaut
    merci grâce à tes indication je suis arrivé à faire le code souhaité

    code modifié :

    Code CS : 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    public static string cs_decrypt(string _privateKey, string _message)
    {
    	// Chargement de la clé publique depuis un fichier PEM
    	AsymmetricKeyParameter privateKey=null;
     
    	PemReader pemReader = new PemReader(new StringReader(_privateKey));
     
    	object keyObject = pemReader.ReadObject();
     
    //	*****************************************************************************************************
    //	*****************************************************************************************************
    //	Ce code ci-dessous est remplacer par le code en dessous car il n'est supporté qu'à partir de C# 7.0
    //	le compilateur de Windev doit être en version inférieure
    //	*****************************************************************************************************
    //	*****************************************************************************************************
    //	if (keyObject is AsymmetricCipherKeyPair keyPair)
    //		privateKey = keyPair.Private;
    //	else if (keyObject is AsymmetricKeyParameter keyParam)
    //		privateKey = keyParam;
    //	else
    //		throw new InvalidOperationException("Clé privée non reconnue.");
     
    	var keyPair = keyObject as AsymmetricCipherKeyPair;
    	if (keyPair != null)
    	{
    		privateKey = keyPair.Private;
    	}
    	else if (keyPair == null)
    	{
    		var keyParam = keyObject as AsymmetricKeyParameter;
    		if (keyParam != null)
    		{
    			privateKey = keyParam;
    		}
    		else
    		{
    			return "Clé privée non reconnue.";
    		}
    	}
    	else
    	{
    		return "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;
    }
    Cordialement JeAn-PhI

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation de Package Subgurim.Maps dans un projet ASP.Net WebForms C#
    Par Fredo97 dans le forum Développement Web avec .NET
    Réponses: 0
    Dernier message: 05/03/2014, 11h33
  2. Utilisation de NumericTextBox package dvp.net
    Par dragonblanc002 dans le forum Dvp.NET
    Réponses: 1
    Dernier message: 20/06/2012, 19h38
  3. [WD17] Utilisation assemblage .NET
    Par thierrybatlle dans le forum WinDev
    Réponses: 2
    Dernier message: 24/01/2012, 11h45
  4. [WD12E] Utilisation Assemblage .NET d'ESRI
    Par hgoethe dans le forum WinDev
    Réponses: 7
    Dernier message: 07/12/2009, 11h45
  5. Utiliser des packages ou des classes présents sur le net
    Par lionrouge dans le forum Général Java
    Réponses: 2
    Dernier message: 27/09/2006, 06h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo