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 :

Comment crypter et décrypter des données ?


Sujet :

C#

  1. #1
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut Comment crypter et décrypter des données ?
    Bonjour à tous,

    Voilà, un truc simple, je cherche à crypter et décrypter des données sous forme de tableau de Byte avec c#.
    J'ai pu voir par moi même que de nombreux algo de cryptage étaient présent, mais je n'arrive vraiment pas à m'en sortir.

    J'ai implémenter ce code (pas mal copié de msdn)

    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
            byte[] Encrypt(byte[] toEncode)
            {
                // Create a memory stream.
                MemoryStream ms = new MemoryStream();
     
                // Create a CryptoStream using the memory stream and the 
                // CSP DES key.  
                CryptoStream encStream = new CryptoStream(ms, DESCryptoServiceProvider.Create().CreateEncryptor(), CryptoStreamMode.Write);
     
                // Create a StreamWriter to write a string
                encStream.Write(toEncode, 0, toEncode.Length);
     
                // Close the StreamWriter and CryptoStream.
                encStream.Close();
     
                // Get an array of bytes that represents
                // the memory stream.
                byte[] buffer = ms.ToArray();
     
                // Close the memory stream.
                ms.Close();
     
                // Return the encrypted byte array.
                return buffer;
            }
     
     
     
     
            byte[] Decrypt(byte[] toDecode)
            {
                // Create a memory stream to the passed buffer.
                MemoryStream ms = new MemoryStream(toDecode);
     
                Byte[] decode = new Byte[ms.ToArray().Length];
                // Create a CryptoStream using the memory stream and the 
                // CSP DES key. 
                CryptoStream encStream = new CryptoStream(ms, DESCryptoServiceProvider.Create().CreateDecryptor(), CryptoStreamMode.Read);
     
                encStream.Read(decode, 0, ms.ToArray().Length);
     
                // Close the streams.
                encStream.Close();
                ms.Close();
     
                return decode;
            }
    Seulement à chaque fois que je tente de decrypter, quelque soit l'algo utilisé (ici DES) j'obtiens une "Bad Data" exception qui survient 8 Bytes avant la fin du Read.

    L'exception n'est pas plus explicite que ça et je ne comprends pas d'où ça vient.

    Si quelqu'un peut m'expliquer...

    Merci


  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    c'est peut-etre que la chaine encoder est plus longue ou moins longue que ce que tu ne crois...

    Et peut-etre que le memoryStream rajoute des informations de longueurs de chaines qui "impactent" le décodage et font un dépassement ;(

    The Monz, Toulouse

  3. #3
    Membre actif Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Points : 245
    Points
    245
    Par défaut
    Voila comment tu peux le faire
    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
    string originalText = "Even the biggest journey, starts with a single step.";
    string encryptedText = string.Empty;
    string decryptedText = string.Empty;
    byte[] bs = null;
     
    TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceProvider();
    tripleDES.GenerateIV();
    tripleDES.GenerateKey();
     
    //
    // Encrypt
    //
    using (MemoryStream ms = new MemoryStream())
    {
        CryptoStream cs = new CryptoStream(ms, tripleDES.CreateEncryptor(tripleDES.Key, tripleDES.IV), CryptoStreamMode.Write);
        using (StreamWriter sw = new StreamWriter(cs))
        {
            sw.Write(originalText);
        }
        bs = ms.ToArray();
    }
    encryptedText = Encoding.Default.GetString(bs);
     
     
    //
    // Decrypt
    //
    using (MemoryStream ms = new MemoryStream(bs))
    {
        CryptoStream cs = new CryptoStream(ms, tripleDES.CreateDecryptor(tripleDES.Key, tripleDES.IV), CryptoStreamMode.Read);
        using (StreamReader sr = new StreamReader(cs))
        {
            decryptedText = sr.ReadToEnd();
        }
    }
    Debug.Assert(originalText == decryptedText);
    C'est le plus propre et le plus simple que je peux imaginer
    A+

Discussions similaires

  1. Crypter de décrypter des données avec Rijndael 256bits
    Par FredericB dans le forum C++Builder
    Réponses: 1
    Dernier message: 12/06/2008, 20h46
  2. Comment entrer et sortir des données?
    Par Antigonos Ier Gonatas dans le forum Général Python
    Réponses: 2
    Dernier message: 13/06/2006, 20h57
  3. [VB6]Comment faire pour récuperer des donnée sur un mp3 ou wav ?
    Par MegaBigBoss dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 13/06/2006, 16h08
  4. Réponses: 11
    Dernier message: 27/05/2006, 00h07
  5. [Oracle/SQL-Server] Comment crypter une base de données ?
    Par [DreaMs] dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 28/11/2005, 18h02

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