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 :
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.
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 } }
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 :
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 ?
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; }
Merci d'avance pour votre aide.
Partager