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

Dotnet Discussion :

Cryptage WinDev16 - Decryptage C#


Sujet :

Dotnet

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 87
    Points : 66
    Points
    66
    Par défaut Cryptage WinDev16 - Decryptage C#
    Bonjour,

    Je reçois une chaine crypté par un petit outil windev16 (je ne connais pas du tout windev) avec la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Résultat> = Crypte(<Chaîne à crypter> , <Mot de passe> [, <Type de cryptage> [, <Format de la chaîne cryptée>]])
    Avec :
    <Type de cryptage> = crypteSécurisé
    <Format de la chaîne cryptée> = compresseAucun

    N'ayant jamais fait des cryptage/décryptage côté C#, je suis aller donc directement voir https://docs.microsoft.com/fr-fr/dot...tframework-4.6
    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
    using (Rijndael rijAlg = Rijndael.Create())
            {
                rijAlg.Key = Encoding.ASCII.GetBytes(Key);
                rijAlg.IV = Encoding.ASCII.GetBytes(IV);
     
                // Create a decryptor to perform the stream transform.
                ICryptoTransform decryptor = rijAlg.CreateDecryptor(rijAlg.Key, rijAlg.IV);
     
                // Create the streams used for decryption.
                using (MemoryStream msDecrypt = new MemoryStream(Encoding.ASCII.GetBytes(cipherText)))
                {
                    using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
                    {
                        using (StreamReader srDecrypt = new StreamReader(csDecrypt))
                        {
     
                            // Read the decrypted bytes from the decrypting stream
                            // and place them in a string.
                            plaintext = srDecrypt.ReadToEnd();
                        }
                    }
                }
            }
    Premier problème dés le début car ici avec la même clé utilisé côté Windev
    string Key = "MAPETITECLE";
    rijAlg.Key = Encoding.ASCII.GetBytes(Key);
    System.Security.Cryptography.CryptographicException*: 'La clé spécifiée n'est pas d'une taille valide pour cet algorithme.'

    Le deuxième problème c'est que je n'ai rien comme donnée qui concerne le "IV".

    Merci d'avance pour vos réponses, je suis en panne depuis le début de l'après-midi et google n'est pour le moment pas mon ami :/

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    On parle de chiffrement et déchiffrement pas de cryptage.
    Et est tu sûr que c’est rijndael qui est utilisé ?
    La clé est un tableau d’octet, pour transformer un string en tableau d’octet il n’y a pas que l’ascidie non plus.
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    hello,
    d'après la doc windev qui se trouve ici, l'option crypteSécurisé utilise l'algorithme RC5 sur 128 bits (AES serait le successeur).
    d'autre part l'option compresseAucun n'est pas une option de format de la chaîne cryptée mais de type/cryptage (à combiner avec l'algorithme).
    Dans les options de format il y a par exemple :
    encodePCS
    (Valeur par défaut)
    Format ASCII. Le fichier crypté ne comportera que des caractères imprimables. La taille du fichier sera supérieure (environ 30%) à la taille du fichier d'origine.
    Ce format peut par exemple être utilisé pour insérer un fichier crypté dans le corps d'un courrier électronique.
    encodeAucun Format binaire. Le fichier crypté pourra comporter des caractères non-imprimables. La taille du fichier sera supérieure (environ 4 octets) à la taille du fichier d'origine.
    encodeBASE64 Format BASE 64. Le fichier est crypté avec l'algorithme BASE64. La taille du fichier sera supérieure (environ 30%) à la taille du fichier d'origine.
    Pour effectuer un encodage en base 64, il est également possible d'utiliser plus simplement la fonction Encode avec la constante encodeBASE64 ou la constante encodeBASE64URL.
    Le format base64 peut par exemple être utilisé pour insérer un fichier dans le corps d'un courrier électronique.

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

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    ello,
    bon comme je possède justement un windev 16, j'ai pu faire un essai en utilisant la fonction Crypte. Constat :
    je pense que ce n'est pas possible de décoder en C# une chaîne cryptée avec la fonction Crypte, car elle utilise un algorithme non standard avec des paramètres internes non connus.
    D'ailleurs dans la doc Windev c'est écrit :
    Attention : les algorithmes de cryptage / décryptage utilisés en Java et Android ne sont pas les mêmes que ceux utilisés par WINDEV. Il n'est donc pas possible de crypter une chaîne de caractères en Java ou Android et de la décrypter avec WINDEV (et inversement).
    Pour crypter une chaîne de caractères en Java ou Android et de la décrypter avec WINDEV (ou inversement), utilisez les fonctions CrypteStandard et DécrypteStandard.
    Cela doit être aussi vrai pour dotnet.
    Les fonctions CrypteStandard et DécrypteStandard qui utilisent des algorithmes standards comme AES, DES , ne sont disponibles que depuis windev 20.
    Alors si il y a possibilité de modifier le programme de cryptage en windev 16 voici ce que je propose :
    Comme dans Windev 16 on peut utiliser des assemblages C# , je propose d'utiliser l'assemblage SimpleAES (de licence MIT) disponible chez Nuget ici
    1 - Télécharger le fichier .nupkg à partir de la page Nuget
    2 - Décompresser le fichier nupkg avec 7zip et extraire l 'assemblage lib\net45\SimpleAES.dll
    3 - L'ajouter au projet windev ( menu Atelier/.NET/Utiliser un assemblage .NET dans ce projet, cliquer sur parcourir, choisir le fichier SimpleAES.dll)
    Voici comment l'utiliser dans Windev par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // Cryptage d'une chaîne
    Res est une chaîne = SimpleAES.AES256.Encrypt("Le numéro de ma carte bancaire 123456789012345", "MotDePasse")
    Trace(Res)
    // Décryptage de la chaîne
    ResDécrypté est une chaîne = SimpleAES.AES256.Decrypt(Res, "MotDePasse")
    Trace(ResDécrypté)
    Résultat :
    Nom : Windev_Crypte_SimpleAES.PNG
Affichages : 630
Taille : 8,4 Ko


    Il suffit alors de remplacer la fonction de cryptage dans windev par le SimpleAES.AES256.Encrypt et dans son programme en C# d'utiliser la fonction de décryptage de l'assemblage.

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

Discussions similaires

  1. Cryptage et decryptage java
    Par MrX dans le forum Sécurité
    Réponses: 9
    Dernier message: 11/07/2007, 11h30
  2. cryptage et decryptage oracle
    Par Bourak dans le forum SQL
    Réponses: 7
    Dernier message: 12/05/2007, 17h28
  3. Cryptage -> URL -> Décryptage, pb code ascci %xx
    Par TicTacToe dans le forum Langage
    Réponses: 2
    Dernier message: 12/05/2006, 13h58
  4. cryptage et decryptage base64
    Par DUBUIS dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 12/01/2006, 18h51

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