Bonjour,

Je migre une application Java en NodeJS. Dans mon code Java, j'encrypte des fichiers avant de les stocker sur un cloud. J'utilisait javax.crypto.Cipher pour encrypter et décrypter les fichiers.

Aujourd'hui, j'ai besoin de développer les deux mêmes méthodes en NodeJS, pour pouvoir décrypter des fichiers cryptés par le code Java ou encrypter de nouveaux fichiers.

Voici mon code Java, qui fonctionne très bien :

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
    private static byte[] encrypt(byte[] plainData) {
        byte[] encryptedData = new byte[0];
        try {
            byte[] cle = (new String(PASSWORD)).getBytes();
            SecretKey key = new SecretKeySpec(cle, "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, key);
            encryptedData = cipher.doFinal(plainData);
        } catch (Exception ex) {
            //Log Error
        }
        return encryptedData;
    }
 
    private static void decrypt(InputStream in, OutputStream out) {
        try {
            // Cipher INIT
            byte[] cle = (new String(PASSWORD)).getBytes();
            SecretKey key = new SecretKeySpec(cle, "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, key);
            // Decrypt
            CipherInputStream cis = new CipherInputStream(in, cipher);
            byte[] block = new byte[8];
            int i;
            while ((i = cis.read(block)) != -1) {
                out.write(block, 0, i);
            }
            out.close();
        } catch (IOException ex) {
            //Log Error
        }
    }
Après plusieurs jours à galérer, je commence à avoir un code qui s'approche, je pense, de ce qu'il faut faire. Dans l’état, le code décrypte (en tout cas aucune exception n'est levée). Cependant, le fichier retourné reste illisible.
Je pense qu'il peut s'agir d'un problème d'encodage, de padding, ou de n'importe quoi d'autre..

Voici le code NodeJS que j'essaye d'écrire pour décrypter :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
    public static decrypt(encryptedData: Buffer): any {
        var decipher = crypto.createDecipher('aes-128-ecb', process.env.CYPHER_PASSWORD);
        decipher.setAutoPadding(false);
        var s;
        try {
            s = Buffer.concat([decipher.update(encryptedData, 'base64'), decipher.final()]);
        }
        catch(e){
            console.log(e);
        }
        return s;
    }
Comme je disais, ce code compile, tourne et renvoie un fichier illisible. Savez-bous ce qui pourrait être la cause de ce mauvais décryptage / decodage ?

Merci d'avance pour votre aide.