Bonjour,

Je souhaiterai décrypter des fichiers zip via une appli C# un utilisant Rijndael.
Pour ça, j'ai bien une clé de décryptage 32 octets ainsi que l'IV qui va bien en 32 octets également.

Le décryptage se déroule bien en utilisant OpenSSL via l'invit' de commandes

Code : Sélectionner tout - Visualiser dans une fenêtre à part
openssl enc -d -aes-128-cbc -K clé -iv IV -in C:\insertion\monfichier.zip -out C:\insertion\resultat.zip
J'ai donc créé une méthode me permettant de décrypter un fichier, en C#. Le problème, c'est qu'elle me retourne l'exception suivante : "Longueur des données à déchiffrer non valide."
Je dois avouer que j'ai du mal à voir d'où ça peut venir, je ne suis pas encore très à l'aise avec le cryptage/décryptage.

Voici ma méthode :

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
public static void decryptFile(string sKey, string sIv, string sPathCypheredFile, string sPathFile)
        {
            // -- Place la clé de déchiffrement dans un tableau d'octets
            // ---------------------------------------------------------
            byte[] key = Encoding.UTF8.GetBytes(sKey);
 
            // -- Place le vecteur d'initialisation dans un tableau d'octets
            // -------------------------------------------------------------
            byte[] iv = Encoding.UTF8.GetBytes(sIv);
 
            try
            {
                // -- Filestream du nouveau fichier décrypté
                // -----------------------------------------
                FileStream fsCrypt = new FileStream(sPathFile, FileMode.Create);
 
                RijndaelManaged rijndael = new RijndaelManaged();
                rijndael.Padding = PaddingMode.Zeros;
                rijndael.BlockSize = 256;
                rijndael.Mode = CipherMode.CBC;
                rijndael.Key = key;
                rijndael.IV = iv;
 
                ICryptoTransform aesDecryptor = rijndael.CreateDecryptor(key, iv);
 
                CryptoStream cs = new CryptoStream(fsCrypt, aesDecryptor, CryptoStreamMode.Write);
 
                // -- FileStream du fichier crypté
                // -------------------------------
                FileStream fsIn = new FileStream(sPathCypheredFile, FileMode.Open);
 
                int data;
 
                while ((data = fsIn.ReadByte()) != -1)
                    cs.WriteByte((byte)data);
 
                cs.Close();
                fsIn.Close();
                fsCrypt.Close();
            }
            catch (Exception ex)
            {
                throw new Exception("GTMCrypto.decryptFile : " + ex.Message + "\n", ex);
            }
        }
Vous pouvez me donner un petit coup de main ?