Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2740 connectés 

  FORUM HardWare.fr
  Programmation
  Javascript/Node.js

  Encodage RSA Javascript Vs Java

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Encodage RSA Javascript Vs Java

n°2393589
krosso
j'suis à la bourre
Posté le 18-08-2021 à 17:29:46  profilanswer
 

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.
mood
Publicité
Posté le 18-08-2021 à 17:29:46  profilanswer
 

n°2393705
krosso
j'suis à la bourre
Posté le 19-08-2021 à 17:48:41  profilanswer
 

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.
n°2393784
rat de com​bat
attention rongeur méchant!
Posté le 20-08-2021 à 16:57:13  profilanswer
 

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".

n°2393817
krosso
j'suis à la bourre
Posté le 21-08-2021 à 00:25:15  profilanswer
 

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.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Javascript/Node.js

  Encodage RSA Javascript Vs Java

 

Sujets relatifs
mise à jour java et problème de résolutionJavascript suggestion dans textarea
Android java quelle application tourne au premier plan ?Javascript API / Recuperer le resultat
Intégrer une appli java sur une page webFormation Java Script lacune en math
problème minecraft : java head spacemacro java sous libre office
[Javascript] - Supprimer un élément ajouté dynamiquement[Résolu] [JS] Besoin d’aide sur réalisation d’un convertisseur dec/hex
Plus de sujets relatifs à : Encodage RSA Javascript Vs Java


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR