Kaneda_Shotaro
Messages postés1Date d'inscriptionvendredi 9 décembre 2005StatutMembreDernière intervention29 juin 2008
-
29 juin 2008 à 17:43
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 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."
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 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