Encodage RSA Javascript Vs Java

Encodage RSA Javascript Vs Java - Javascript/Node.js - Programmation

Marsh Posté le 18-08-2021 à 17:29:46    

Ce petit bout de code permet d'encoder des données avec une clef publique :
 

Citation :

   public cryptData(data: object): string {
        const encrypt = new JSEncrypt();
        encrypt.setPublicKey(this.publicKey); //la clef est contenue dans une chaine initialisée par ailleurs
        return encrypt.encrypt(JSON.stringify(data));
    }


 
 
De l'autre côté on décode avec notre clef privée, ça fonctionne sans souci.
 
Mes années de développement sont trèèèès loin derrière moi mais par curiosité e"t pour aider un client  j'ai voulu recoder la même routine en Java.
 

Citation :

   public static String encryptStringWithPublicKey(String s, String keyFilename) throws Exception  
    {
        Cipher cipher = Cipher.getInstance("RSA" );
        PublicKey pubkey = readPublicKeyFromPem(keyFilename);//la clef est contenue dans un fichier, cette routine va la lire.
        cipher.init(Cipher.ENCRYPT_MODE, pubkey);
        String enc = Base64.getEncoder().encodeToString(cipher.doFinal(s.getBytes("UTF-8" )));
        return enc;
    }


 
Ce n'est pas tellement plus compliqué et ça fonctionne bien.
 
Ou pas.
 
En effet, après plusieurs tests je suis tombé sur cette erreur :

Citation :

javax.crypto.IllegalBlockSizeException: Data must not be longer than 245 bytes
 at java.base/com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:347)
 at java.base/com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:392)
 at java.base/javax.crypto.Cipher.doFinal(Cipher.java:2205)
 at TestProductMessage.encryptStringWithPublicKey(TestProductMessage.java:139)
 at TestProductMessage.main(TestProductMessage.java:97)


 
qui n'en est pas vraiment une, car la librairie Java refuse d'encoder un message plus long que 245 bytes pour les raisons expliquées là :
https://cryptographyprogramming.blo [...] excep.html
 
Question :  
Javascript l'autorise et pas Java, est-ce seulement car Javascript est plus permissif ?
 
 
 
 


---------------
Dieu se rit des hommes qui déplorent les effets dont ils chérissent les causes.
Reply

Marsh Posté le 18-08-2021 à 17:29:46   

Reply

Marsh Posté le 19-08-2021 à 17:48:41    

Quand on utilise le module crypto au lieu du module jsencrypt, on a le même message qu'en java.
 
=> c'est donc cette librairie spécifique qui est trop permissive.
 
 
 


---------------
Dieu se rit des hommes qui déplorent les effets dont ils chérissent les causes.
Reply

Marsh Posté le 20-08-2021 à 16:57:13    

C'est une histoire de mode certainement. Je ne connais pas bien RSA mais pour les crypto blocks symmétriques genre AES il faut utiliser un mode tel ECB (déconseillé!!), CBC (idem) ou autre. https://en.wikipedia.org/wiki/Block [...] _operation
 
Aussi il faut que l'entrée de la fonction qui fait le cryptage soit un multiple de 128 bits pour l'AES, sinon il faudra rajouter du "padding".

Reply

Marsh Posté le 21-08-2021 à 00:25:15    

rat de combat a écrit :

C'est une histoire de mode certainement. Je ne connais pas bien RSA mais pour les crypto blocks symmétriques genre AES il faut utiliser un mode tel ECB (déconseillé!!), CBC (idem) ou autre. https://en.wikipedia.org/wiki/Block [...] _operation
 
Aussi il faut que l'entrée de la fonction qui fait le cryptage soit un multiple de 128 bits pour l'AES, sinon il faudra rajouter du "padding".


Pour le moment on n'utilise pas de clef symétrique AES.
Mais on va changer notre implémentation pour faire comme c'est décrit dans le lien que j'avais donné dans mon premier post : créer une clef symétrique temporaire, chiffrer le message long avec, chiffrer la clef symétrique avec la clef publique et envoyer message et clef sym. tempo.
De l'autre côté, on déchiffrera la clef tempo avec notre clef privée, et le message avec la clef déchiffrée.
 
En cherchant un peu sur le net, c'est la méthode attendue.
C'est vraiment curieux que la librairie jsencrypt permette de chiffrer des messages trop longs avec une clef publique sans "râler".


Message édité par krosso le 21-08-2021 à 00:26:10

---------------
Dieu se rit des hommes qui déplorent les effets dont ils chérissent les causes.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed