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

C# Discussion :

Utiliser du Java en C# avec Visual Studio


Sujet :

C#

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 74
    Par défaut Utiliser du Java en C# avec Visual Studio
    Bonjour a tous,

    voilà, je cherche un moyen simple d’exécuter un bout de code Java dans mon application C#. Je programme sous visual studio.

    Mon problème est que je veux décrypter un mot de passe crypter en PBEWithMD5AndDES et que je ne trouve pas comment le faire en C# alors qu'en Java cela me prend 4 lignes !

    Code Java pour décrypter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    org.jasypt.encryption.pbe.StandardPBEStringEncryptor enc = new org.jasypt.encryption.pbe.StandardPBEStringEncryptor ();
            enc.setAlgorithm("PBEWithMD5AndDES");
            enc.setPassword("MYKEYCRYPT"); //Clé de cryptage
            String s = enc.decrypt("F/a19FQ3ENw61C9GKptd8G0HkbEkO/a+"); //chaine crypté
            System.out.println("Mot de passe décrypté : " + s); //résultat
    Donc, à défaut de trouver la solution en C#, je me suis dit que si il y a un moyen d'executer ce code en C#, cela fonctionnerais

    Mais si quelqu'un sait décrypter ceci en C#, je suis preneur aussi ! Merci d'avance

  2. #2
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 93
    Par défaut
    Si je dis pas de bêtise tu dois faire en sorte d'éxécuter ton .jar dans du Shell, cela est faisable en C# et récupérer le résultat : Lien google
    Ou alors passer par un WebService.

    Et pour ton crypte : Lien google

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 74
    Par défaut
    Citation Envoyé par Kangourex Voir le message
    Si je dis pas de bêtise tu dois faire en sorte d'éxécuter ton .jar dans du Shell, cela est faisable en C# et récupérer le résultat : Lien google
    Ou alors passer par un WebService.

    Et pour ton crypte : Lien google
    Bonjour Kangourex et merci de ta réponse

    Concernant le crypte, j'avais vu cet exemple mais je ne le comprends pas. En effet je ne comprend pas a quoi correspond le salt. D'après mes recherches, il s'agirait d'une chaine de caractère (ou autre) qui permet de complexifier le mot de passe. Or dans mon cas, je n'en utilise pas. Et sans salt, je ne peux utiliser cette méthode :s Qu'en penses-tu ?

  4. #4
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 93
    Par défaut
    De ce que j'ai pu voir dans les exemples d'utilisation de ce crypte en java ils mettent bien en paramètre un Salt et un Nombre d'itération ^^

    Mais sûrement que la classe StandardPBEStringEncryptor du Java impose un Salt et un nombre d'itération pour faciliter les cryptes.

    Reste sur la solution d'éxécuter le .jar pour moi ça reste la solution la plus simple à ton problème.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 74
    Par défaut
    Daccord j'esseye comme cela alors =). Il faut donc que je mette ma fonction de décryptage dans un programme Java seul c'est bien cela ?

  6. #6
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 93
    Par défaut
    Oui une simple application console, avec un System.out.println() qui sera ce que tu récupéreras en C#.

    EDIT : Dans la classe Main bien sûr ^^

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 74
    Par défaut
    D’accord merci , j’essaye cela de suite =)

    [EDIT]
    Désolé d'insister mais je ne comprend pas comment appeler mon programme Java, car dans les exemples, ils appellent des .exe, or je n'ai que des .class dans mon projet java :/

  8. #8
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 93
    Par défaut
    Il utilise le Jdk du java pour que le Shell comprenne le Java, tu es obligé de l'avoir sur ton pc si tu développes en Java ^^

  9. #9
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 74
    Par défaut
    J'ai essayé en utilisant jni4net avec un exemple tout simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    using net.sf.jni4net;
     
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                Bridge.CreateJVM(new BridgeSetup());
                java.lang.System.@out.println("HEYYYYY JAVA !!");
            }
        }
    }
    Mais rien ne s'affiche, voici ma sortie :

    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
    'ConsoleApplication1.vshost.exe' (Managé (v4.0.30319))*: 'C:\windows\Microsoft.Net\assembly\GAC_32\System.Data\v4.0_4.0.0.0__b77a5c561934e089\System.Data.dll' chargé, symboles chargés.
    'ConsoleApplication1.vshost.exe' (Managé (v4.0.30319))*: 'C:\windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll' chargé, symboles chargés.
    'ConsoleApplication1.vshost.exe' (Managé (v4.0.30319))*: 'C:\windows\Microsoft.Net\assembly\GAC_MSIL\mscorlib.resources\v4.0_4.0.0.0_fr_b77a5c561934e089\mscorlib.resources.dll' chargé
    Une exception de première chance de type 'System.Runtime.InteropServices.COMException' s'est produite dans Microsoft.VisualStudio.HostingProcess.Utilities.dll
    Le thread 'vshost.NotifyLoad' (0x12d8) s'est arrêté avec le code 0 (0x0).
    Le thread '<Sans nom>' (0xb6c) s'est arrêté avec le code 0 (0x0).
    Le thread '<Sans nom>' (0x12c0) s'est arrêté avec le code 0 (0x0).
    Le thread 'vshost.LoadReference' (0x17b8) s'est arrêté avec le code 0 (0x0).
    'ConsoleApplication1.vshost.exe' (Managé (v4.0.30319))*: 'd:\m.andanson\mes documents\visual studio 2012\Projects\TestCSAndJava\ConsoleApplication1\bin\Debug\ConsoleApplication1.exe' chargé, symboles chargés.
    'ConsoleApplication1.vshost.exe' (Managé (v4.0.30319))*: 'd:\m.andanson\mes documents\visual studio 2012\Projects\TestCSAndJava\ConsoleApplication1\bin\Debug\jni4net.n-0.8.8.0.dll' chargé
    'ConsoleApplication1.vshost.exe' (Managé (v4.0.30319))*: 'net.sf.jni4net.jni.dynammic' chargé
    'ConsoleApplication1.vshost.exe' (Managé (v4.0.30319))*: 'net.sf.jni4net.jni.dynammic.dll' chargé
    Le thread 'vshost.RunParkingWindow' (0x1ae4) s'est arrêté avec le code 0 (0x0).
    Le thread '<Sans nom>' (0xb08) s'est arrêté avec le code 0 (0x0).
    Le programme '[6888] ConsoleApplication1.vshost.exe: Managé (v4.0.30319)' s'est arrêté avec le code 0 (0x0).
    Je suis un peu perdu la :/

  10. #10
    Membre émérite Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Par défaut
    En faisant une petite recherche je trouve des personnes qui ont codés des classes permettant de réaliser ce que fait JAVA :

    ici : http://thomashundley.com/2011/04/21/...tion-with-net/
    ou encore là : http://www.codeproject.com/Articles/...tion-under-NET

  11. #11
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 74
    Par défaut
    Oui, mais comme je l'ai dis tout à l'heure, je n'ai pas de salt moi =/

  12. #12
    Membre émérite Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Par défaut
    Citation Envoyé par marvin6303 Voir le message
    Oui, mais comme je l'ai dis tout à l'heure, je n'ai pas de salt moi =/


    ton salt est juste un tableau vide du coup.....

  13. #13
    Membre émérite Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Par défaut
    En reprenant le premier lien que je t'ai filé :

    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
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
     
     class Program
        {
            static void Main(string[] args)
            {
                Program pr = new Program();
                var test = pr.EncryptUsernamePassword("test");
     
                var test2 = pr.DecryptUsernamePassword(test);
     
                Console.ReadLine();
            }
     
            public string EncryptUsernamePassword(string clearText)
            {
                // TODO: Parameterize the Password, Salt, and Iterations.  They should be encrypted with the machine key and stored in the registry
                if (string.IsNullOrEmpty(clearText))
                {
                    return clearText;
                }
     
                byte[] salt = {};
     
                // NOTE: The keystring, salt, and iterations must be the same as what is used in the Demo java system.
                PKCSKeyGenerator crypto = new PKCSKeyGenerator("MyPassword", salt, 20, 1);
     
                ICryptoTransform cryptoTransform = crypto.Encryptor;
                var cipherBytes = cryptoTransform.TransformFinalBlock(Encoding.UTF8.GetBytes(clearText), 0, clearText.Length);
                return Convert.ToBase64String(cipherBytes);
            }
     
     
            public string DecryptUsernamePassword(string cipherText)
            {
                if (string.IsNullOrEmpty(cipherText))
                {
                    return cipherText;
                }
     
                byte[] salt = {};
     
                // NOTE: The keystring, salt, and iterations must be the same as what is used in the Demo java system.
                PKCSKeyGenerator crypto = new PKCSKeyGenerator("MyPassword", salt, 20, 1);
     
                ICryptoTransform cryptoTransform = crypto.Decryptor;
                var cipherBytes = Convert.FromBase64String(cipherText);
                var clearBytes = cryptoTransform.TransformFinalBlock(cipherBytes, 0, cipherBytes.Length);
                return Encoding.UTF8.GetString(clearBytes);
            }
        }
    }
     
     
     
     
    public class PKCSKeyGenerator
    {
     
     
        private byte[] key = new byte[8];
     
     
        private byte[] iv = new byte[8];
     
     
        private DESCryptoServiceProvider des = new DESCryptoServiceProvider();
     
        public PKCSKeyGenerator()
        {
        }
     
     
        public PKCSKeyGenerator(string keystring, byte[] salt, int iterationsMd5, int segments)
        {
            this.Generate(keystring, salt, iterationsMd5, segments);
        }
     
     
        public byte[] Key
        {
            get
            {
                return this.key;
            }
        }
     
     
        public byte[] IV
        {
            get
            {
                return this.iv;
            }
        }
     
     
        public ICryptoTransform Encryptor
        {
            get
            {
                return this.des.CreateEncryptor(this.key, this.iv);
            }
        }
     
        public ICryptoTransform Decryptor
        {
            get
            {
                return des.CreateDecryptor(key, iv);
            }
        }
     
     
        public ICryptoTransform Generate(string keystring, byte[] salt, int iterationsMd5, int segments)
        {
            // MD5 bytes
            int hashLength = 16;
     
            // to store contatenated Mi hashed results
            byte[] keyMaterial = new byte[hashLength * segments];
     
            // --- get secret password bytes ----
            byte[] passwordBytes;
            passwordBytes = Encoding.UTF8.GetBytes(keystring);
     
            // --- contatenate salt and pswd bytes into fixed data array ---
            byte[] data00 = new byte[passwordBytes.Length + salt.Length];
     
            // copy the pswd bytes
            Array.Copy(passwordBytes, data00, passwordBytes.Length);
     
            // concatenate the salt bytes
            Array.Copy(salt, 0, data00, passwordBytes.Length, salt.Length);
     
            // ---- do multi-hashing and contatenate results  D1, D2 ...  into keymaterial bytes ----
            MD5 md5 = new MD5CryptoServiceProvider();
            byte[] result = null;
     
            // fixed length initial hashtarget
            byte[] hashtarget = new byte[hashLength + data00.Length];
     
            for (int j = 0; j < segments; j++)
            {
                // ----  Now hash consecutively for iterationsMd5 times ------
                if (j == 0)
                {
                    // initialize
                    result = data00;
                }
                else
                {
                    Array.Copy(result, hashtarget, result.Length);
                    Array.Copy(data00, 0, hashtarget, result.Length, data00.Length);
                    result = hashtarget;
                }
     
                for (int i = 0; i < iterationsMd5; i++)
                {
                    result = md5.ComputeHash(result);
                }
     
                // contatenate to keymaterial
                Array.Copy(result, 0, keyMaterial, j * hashLength, result.Length);
            }
     
            Array.Copy(keyMaterial, 0, this.key, 0, 8);
            Array.Copy(keyMaterial, 8, this.iv, 0, 8);
     
            return this.Encryptor;
        }

  14. #14
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 74
    Par défaut
    Merci beaucoup !! Il me reste un léger problème, lorsque j'essaye de décrypter ma chaine cryptée, j’obtiens une erreur :

    Nom : errorcypher.png
Affichages : 366
Taille : 14,9 Ko

    De plus, lorsque j'encrypte mon mot de passe, je n'obtient pas la même chaine cryptée que lorsque j'utilise le programme Java. Est-ce normal ?

    Encore merci de ton aide !

  15. #15
    Membre émérite Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Par défaut
    Il nous faut plus d'explications, plus de détails sur l'exception, et un peu plus de code pour savoir pourquoi cela plante.
    Peux tu aussi nous donner un exemple qui fait planter?

  16. #16
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 74
    Par défaut
    Ma chaine cryptée est : F/a19FQ3ENw61C9GKptd8G0HkbEkO/a+
    Le mot de passe que je doit retrouver est CHAMALIERES, et lorsque je l'encrypte avec la méthode C#, j'obtient cette chaine : Y79q/J4OHjI8BcrdX1nd8Q==

    Ma clé est : CRYPTKABY!64!

  17. #17
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 74
    Par défaut
    et concernant le code, j'ai simplement repris ton exemple

    Code :

    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
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
     
     class Program
        {
            static void Main(string[] args)
            {
                Program pr = new Program();
                var test = pr.EncryptUsernamePassword("test");
     
                var test2 = pr.DecryptUsernamePassword(test);
     
                Console.ReadLine();
            }
     
            public string EncryptUsernamePassword(string clearText)
            {
                // TODO: Parameterize the Password, Salt, and Iterations.  They should be encrypted with the machine key and stored in the registry
                if (string.IsNullOrEmpty(clearText))
                {
                    return clearText;
                }
     
                byte[] salt = {};
     
                // NOTE: The keystring, salt, and iterations must be the same as what is used in the Demo java system.
                PKCSKeyGenerator crypto = new PKCSKeyGenerator("MyPassword", salt, 20, 1);
     
                ICryptoTransform cryptoTransform = crypto.Encryptor;
                var cipherBytes = cryptoTransform.TransformFinalBlock(Encoding.UTF8.GetBytes(clearText), 0, clearText.Length);
                return Convert.ToBase64String(cipherBytes);
            }
     
     
            public string DecryptUsernamePassword(string cipherText)
            {
                if (string.IsNullOrEmpty(cipherText))
                {
                    return cipherText;
                }
     
                byte[] salt = {};
     
                // NOTE: The keystring, salt, and iterations must be the same as what is used in the Demo java system.
                PKCSKeyGenerator crypto = new PKCSKeyGenerator("MyPassword", salt, 20, 1);
     
                ICryptoTransform cryptoTransform = crypto.Decryptor;
                var cipherBytes = Convert.FromBase64String(cipherText);
                var clearBytes = cryptoTransform.TransformFinalBlock(cipherBytes, 0, cipherBytes.Length);
                return Encoding.UTF8.GetString(clearBytes);
            }
        }
    }
     
     
     
     
    public class PKCSKeyGenerator
    {
     
     
        private byte[] key = new byte[8];
     
     
        private byte[] iv = new byte[8];
     
     
        private DESCryptoServiceProvider des = new DESCryptoServiceProvider();
     
        public PKCSKeyGenerator()
        {
        }
     
     
        public PKCSKeyGenerator(string keystring, byte[] salt, int iterationsMd5, int segments)
        {
            this.Generate(keystring, salt, iterationsMd5, segments);
        }
     
     
        public byte[] Key
        {
            get
            {
                return this.key;
            }
        }
     
     
        public byte[] IV
        {
            get
            {
                return this.iv;
            }
        }
     
     
        public ICryptoTransform Encryptor
        {
            get
            {
                return this.des.CreateEncryptor(this.key, this.iv);
            }
        }
     
        public ICryptoTransform Decryptor
        {
            get
            {
                return des.CreateDecryptor(key, iv);
            }
        }
     
     
        public ICryptoTransform Generate(string keystring, byte[] salt, int iterationsMd5, int segments)
        {
            // MD5 bytes
            int hashLength = 16;
     
            // to store contatenated Mi hashed results
            byte[] keyMaterial = new byte[hashLength * segments];
     
            // --- get secret password bytes ----
            byte[] passwordBytes;
            passwordBytes = Encoding.UTF8.GetBytes(keystring);
     
            // --- contatenate salt and pswd bytes into fixed data array ---
            byte[] data00 = new byte[passwordBytes.Length + salt.Length];
     
            // copy the pswd bytes
            Array.Copy(passwordBytes, data00, passwordBytes.Length);
     
            // concatenate the salt bytes
            Array.Copy(salt, 0, data00, passwordBytes.Length, salt.Length);
     
            // ---- do multi-hashing and contatenate results  D1, D2 ...  into keymaterial bytes ----
            MD5 md5 = new MD5CryptoServiceProvider();
            byte[] result = null;
     
            // fixed length initial hashtarget
            byte[] hashtarget = new byte[hashLength + data00.Length];
     
            for (int j = 0; j < segments; j++)
            {
                // ----  Now hash consecutively for iterationsMd5 times ------
                if (j == 0)
                {
                    // initialize
                    result = data00;
                }
                else
                {
                    Array.Copy(result, hashtarget, result.Length);
                    Array.Copy(data00, 0, hashtarget, result.Length, data00.Length);
                    result = hashtarget;
                }
     
                for (int i = 0; i < iterationsMd5; i++)
                {
                    result = md5.ComputeHash(result);
                }
     
                // contatenate to keymaterial
                Array.Copy(result, 0, keyMaterial, j * hashLength, result.Length);
            }
     
            Array.Copy(keyMaterial, 0, this.key, 0, 8);
            Array.Copy(keyMaterial, 8, this.iv, 0, 8);
     
            return this.Encryptor;
        }

    Et concernant le programme Java, le voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public static void main(String[] args) throws FileNotFoundException, ClassNotFoundException{
     
     
            org.jasypt.encryption.pbe.StandardPBEStringEncryptor enc = new org.jasypt.encryption.pbe.StandardPBEStringEncryptor ();
            enc.setAlgorithm("PBEWithMD5AndDES");
            enc.setPassword("CRYPTKABY!64!"); //Clé de cryptage
            String s = enc.decrypt("F/a19FQ3ENw61C9GKptd8G0HkbEkO/a+"); //chaine crypté
            System.out.println("Mot de passe décrypté : " + s); //résultat
     
     
     
    	}
    Il est en effet beaucoup moins conséquent ..

  18. #18
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 74
    Par défaut
    J'AI TROUVE !!! =D

    Il fallait que je set la longueur de la clé de hash à 32 (car dans mon exemple, cette chaine fait 32 caractères) dans la méthode Generate

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public ICryptoTransform Generate(string keystring, byte[] salt, int iterationsMd5, int segments)
        {
            // MD5 bytes
            int hashLength = 32;
     
            // to store contatenated Mi hashed results
            byte[] keyMaterial = new byte[hashLength * segments];
    Je bascule le sujet en résolu ! Un grand merci à vous pour vos réponses! =)

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

Discussions similaires

  1. [Débutant] Utilisation du forum et problème avec Visual Studio
    Par programmes dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 02/06/2014, 23h07
  2. Utilisation base de données acces avec Visual Studio 2008
    Par Mangamaster59 dans le forum Accès aux données
    Réponses: 0
    Dernier message: 26/05/2012, 12h10
  3. utiliser un web service php avec Visual Studio
    Par <% Bastien %> dans le forum Services Web
    Réponses: 6
    Dernier message: 15/03/2008, 16h26
  4. Probleme d'utilisation de directX 9 avec visual studio.net
    Par cranedoeuf dans le forum DirectX
    Réponses: 1
    Dernier message: 24/05/2004, 04h33

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