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

Sécurité Java Discussion :

Cryptage de données en java


Sujet :

Sécurité Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Par défaut Cryptage de données en java
    Bonjour à tous,

    j'ai un code c# qui est le suivant :

    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
     
     
    usingSystem;
    usingSystem.Collections.Generic;
    usingSystem.Text;
    usingSystem.IO;
    usingSystem.Security.Cryptography;
        ///<summary>
        ///encrypt/decrypt a string (password) using the input key (must be provided)
        ///and the IV (initializing vector)
        ///the key and IV must have the same length
        ///</summary>
        public abstract class TripleDES
        {
            public static string Encrypt(string data, byte[] Key, byte[] IV)
            {
                string result = null;
                try
                {
                    MemoryStream output = new MemoryStream();
                    byte[] byteData = new UnicodeEncoding().GetBytes(data);
     
                    //Use the TripleDES symmetric encryption algorithm to encrypt our data. Without an IV, the 
                    //same input block of plaintext will encrypt to same output block of ciphertext. IV guarantees 
                    //output of two identical plaintext blocks are different. 
                    //byte[] keyy = new byte[100];
                    //byte[] ivv = new byte[100];
                    TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
                    CryptoStream crypt = new CryptoStream(output,
                        new TripleDESCryptoServiceProvider().CreateEncryptor(Key, IV),
                        CryptoStreamMode.Write);
     
                    //Assign our crypto-generated key and iv values to our output arguments
                    //desKey = des.Key; desIV = des.IV;
                    crypt.Write(byteData, 0, byteData.Length);
                    crypt.FlushFinalBlock();
                    crypt.Close(); 
                    output.Close();
                    result = new UnicodeEncoding().GetString(output.ToArray());
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                return result;
            }
     
    ======  Utilisation de ce code... Pour crypter
    stringkey = ConfigurationManager.AppSettings["Key"];
                string iv = ConfigurationManager.AppSettings["IV"];
                string text = TextBox1.Text;
                string cryp = TripleDES.Encrypt(text,
                    new ASCIIEncoding().GetBytes(key),
                    new ASCIIEncoding().GetBytes(iv));
                string Text = HttpUtility.UrlEncode( cryp);
    Ce code permet une authentification sur un site.

    Je dois encoder de la même manière mais en java.
    Voici mon 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
     
     byte[] input = new String("pmc").getBytes();
    		  				  byte[] encryptKey  = "****************".getBytes();
    				          byte[] ivBytes = "********".getBytes();
     
     
     
    				          // Créer la clé
    				          SecretKey key = new SecretKeySpec(encryptKey, "DESede");
     
    				          // Initial Vector
    				          IvParameterSpec ivParameters = new IvParameterSpec(ivBytes);
     
    				          // Créer un DESede Cipher
    				          Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
     
    				          // Initialise le cipher et le met en mode "encrypt"
    				         cipher.init(Cipher.ENCRYPT_MODE, key, ivParameters);     
    				          byte[] cipherText = new byte[cipher.getOutputSize(input.length)];	   
    				          int ctLength = cipher.update(input, 0, input.length, cipherText, 0);
    				          ctLength += cipher.doFinal(cipherText, ctLength);
     
    System.out.println("Login crypté et encodé en UTF-8: "+ URLEncoder.encode(new String(cipherText),"UTF-8"));
    Or je n'obtiens pas le même résultat:

    Avec le code c# :
    String d'entrée : pcm
    String de sortie : %ea%b4%9e%ee%9e%a6%e4%b7%9f%ed%8f%8c

    Avec le code java
    String d'entrée : pcm
    String de sortie : %1E%C3%A1%C3%A2%C3%89%1A%C3%B6%14%C3%A4

    Savez vous d'où cela peut venir ?

    Je désespère.

    Merci bcp

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,
    Es tu sûr que le vecteur initial (IV) est le même dans les deux cas ? l'algorithme en .Net est bien en mode CBC comme Java, le padding est le même ?

  3. #3
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Par défaut
    Pour l'IV, il s'agit bien du même.
    Cependant, pour le mode et le padding; le code C#
    n'est pas très explicites.
    Savez-vous quels sont ceux par défaut ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jujur Voir le message
    Pour l'IV, il s'agit bien du même.
    Cependant, pour le mode et le padding; le code C#
    n'est pas très explicites.
    Savez-vous quels sont ceux par défaut ?


    Salut, après un petit tour ici, il semblerait que .Net soit en mode CBC, pour ce qui est du padding utilise en .Net PKCS#7 d'après ce mee lien et bien PKCS#5 en Java
    P.S. Padding with nulls is normally a bad idea. Use PKCS7 padding in .NET and then you can decrypt in Java using PKCS5 (yes 5) padding.

  5. #5
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Par défaut
    Je m'en sors toujours pas.
    Par défaut, en c#, qu'en aucun ciphermode n'est précisé, s'agit-il bien de CBC.

    Je voulais également savoir si new ASCIIEncoding().GetBytes(key) en c# correspond bien à key.getBytes() en java et HttpUtility.UrlEncode( cryp) à
    URLEncoder.encode(crypt, "UTF-8") ??

  6. #6
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Par défaut
    Je m'en sors toujours pas.
    Par défaut, en c#, qu'en aucun ciphermode n'est précisé, s'agit-il bien de CBC.

    Je voulais également savoir si new ASCIIEncoding().GetBytes(key) en c# correspond bien à key.getBytes() en java et HttpUtility.UrlEncode( cryp) à
    URLEncoder.encode(cryp, "UTF-8") ??

  7. #7
    Invité
    Invité(e)
    Par défaut
    Pour le getBytes, un très rapide tour sur la javadoc donne ta réponse : http://java.sun.com/javase/6/docs/ap...tml#getBytes()
    A moins que l'encodage de ta plateforme soit l'ASCII, ce dont je doute, la réponse est : non le résultat n'est pas le même. Cette même javadoc donne une piste de ce qu'il faut faire si on veut utiliser un encodage spécial...

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

Discussions similaires

  1. meilleure base de données avec java
    Par mial dans le forum JDBC
    Réponses: 11
    Dernier message: 10/11/2010, 11h49
  2. Réponses: 2
    Dernier message: 05/06/2007, 18h04
  3. [Crypt]Fonction simple de cryptage des données
    Par Agoye dans le forum Sécurité
    Réponses: 5
    Dernier message: 30/08/2006, 19h35
  4. base données avec java mono et multi utilisateurs
    Par Garion dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 03/12/2004, 09h20
  5. Quiz : testez vos connaissances sur le cryptage des données
    Par SheikYerbouti dans le forum Oracle
    Réponses: 0
    Dernier message: 08/10/2004, 10h06

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