Crypter une chaine de texte

Kaneda_Shotaro Messages postés 1 Date d'inscription vendredi 9 décembre 2005 Statut Membre Dernière intervention 29 juin 2008 - 29 juin 2008 à 17:43
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 - 30 juin 2008 à 09:48
Bonjour


j'essaye de crypter du texte avec cette classe :


public static class Cryptage
    {
        public static byte[] EncryptString(string txt, string sKey)
        {
            TripleDES DES3 = new TripleDESCryptoServiceProvider();
            byte[] bs = new byte[24];
            for (int i = 0; i < DES3.Key.Length && i < sKey.Length; i++)
            {
                bs[i] = Convert.ToByte(sKey[i]);
            }
            DES3.Key = bs;
            DES3.IV = new byte[] { 1, 6, 10, 4, 2, 6, 7, 8 };
            MemoryStream ms_out = new MemoryStream();
            byte[] b_in = Encoding.Unicode.GetBytes(txt);
            ms_out.SetLength(0);
            CryptoStream encStream = new CryptoStream(ms_out, DES3.CreateEncryptor(), CryptoStreamMode.Write);
            encStream.Write(b_in, 0, b_in.Length);
            byte[] b_out = ms_out.ToArray();
            encStream.Close();
            ms_out.Close();
            return b_out;
        }
        public static string DecryptString(byte[] b_in, string sKey)
        {
            TripleDES DES3 = new TripleDESCryptoServiceProvider();
            byte[] bs = new byte[24];
            for (int i = 0; i < DES3.Key.Length && i < sKey.Length; i++)
            {
                bs[i] = Convert.ToByte(sKey[i]);
            }
            DES3.Key = bs;
            DES3.IV = new byte[] { 1, 6, 10, 4, 2, 6, 7, 8 };
            MemoryStream ms_out = new MemoryStream();
            ms_out.SetLength(0);
            CryptoStream encStream = new CryptoStream(ms_out, DES3.CreateDecryptor(), CryptoStreamMode.Write);
            encStream.Write(b_in, 0, b_in.Length);
            byte[] b_out = ms_out.ToArray();
            string result = Encoding.Unicode.GetString(b_out);
            encStream.Close();
            ms_out.Close();
            return result;
        }
    }


Mais alors que mon texte à l'origine fait 8 caractères, je me retrouve au final, lors du décryptage avec la moitié des lettres (le bonnes, c'est déjà ça) et une exception
L'exception System.Security.Cryptography.CryptographicException n'a pas été gérée = "Données incorrectes."


Où est mon erreur ? Merci.

@+, Kaneda Shotaro
Kaneda-Shotaro.com

1 réponse

leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
30 juin 2008 à 09:48
je ne vois pas d'erreur d'algorithme, je dirais donc que ton stream a des données bufferisées au moment ou tu fait ton "ToArray". il faut donc soit que tu ferme ton stream avant le ToArray, soit que tu appelle la méthode Flush dessus
0
Rejoignez-nous