Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    août 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : août 2018
    Messages : 2
    Points : 1
    Points
    1

    Par défaut Encryptage avec Java Cipher / Décryptage en NodeJS

    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.

  2. #2
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    août 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : août 2018
    Messages : 2
    Points : 1
    Points
    1

    Par défaut Solution trouvée mais pas comprise

    J'ai finalement trouvé la solution en testant toutes les combinaisons possibles des 4 variables que j'ai identifié : Algorithme, Padding, Encoding de la clef, createDecipher vs createDecipheriv.

    Je ne comprend toujours pas c'est cette configuration qui fonctionne et pas une autre. Si quelqu'un sait expliquer ce serait super =)
    Si personne ne répond d'ici quelques jours à ce sujet, je mettrai cette question comme résolue.

    Voici le code qui fonctionne :

    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
        public static decrypt(encryptedData: Buffer): Buffer {
            var decipher = crypto.createDecipheriv(process.env.CYPHER_ALGO, process.env.CYPHER_PASSWORD, "");
            var s;
            try {
                var b1: Buffer = decipher.update(encryptedData);
                var b2: Buffer = decipher.final();
                s = Buffer.concat([b1, b2]);
            }
            catch (e) {
                console.log(e);
            }
            return s;
        }
     
        // ALGO : 'aes-128-ecb'

Discussions similaires

  1. meilleure base de données avec java
    Par mial dans le forum JDBC
    Réponses: 11
    Dernier message: 10/11/2010, 11h49
  2. [LDAP] recherche dans differents container LDAP avec Java
    Par touinth dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 01/07/2004, 16h06
  3. [CR][Java] imprimer un état CR avec java
    Par wassimb dans le forum SDK
    Réponses: 2
    Dernier message: 24/05/2004, 16h40
  4. Réponses: 3
    Dernier message: 27/01/2004, 16h15
  5. [JNDI] Equivalent avec Java Web Start ?
    Par cameleon2002 dans le forum Java EE
    Réponses: 8
    Dernier message: 18/09/2003, 18h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo