CHIFFREMENT RSA (RIVEST SHAMIR ADLEMAN)

imeneimene Messages postés 61 Date d'inscription mercredi 24 décembre 2008 Statut Membre Dernière intervention 10 avril 2010 - 13 janv. 2009 à 15:40
Dorsin Messages postés 1 Date d'inscription samedi 10 mai 2014 Statut Membre Dernière intervention 1 mars 2018 - 1 mars 2018 à 14:42
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/48867-chiffrement-rsa-rivest-shamir-adleman

Dorsin Messages postés 1 Date d'inscription samedi 10 mai 2014 Statut Membre Dernière intervention 1 mars 2018
1 mars 2018 à 14:42
Ce gars est bon.... Merci beaucoup. Code efficace. Beaucoup de courage !!! ;)
heahel Messages postés 1 Date d'inscription jeudi 13 décembre 2007 Statut Membre Dernière intervention 26 avril 2010
26 avril 2010 à 15:04
Bonjour,
Personnellement je mets une très mauvaise note au code, en raison de l'utilisation de la classe Random.
En effet, la sécurité de RSA réside dans la difficulté de factoriser n = p*q.
Or Random ne garantit pas un choix totalement aléatoire de p et de q.
Ce chiffrement RSA n'est pas sûr, il s'agit plus d'un TP, à ne pas utiliser pour les transcation réellement sensible.
Je suis méchant c'est vrai mais l'auteur aurait bien du signaler, ceci afin d'éviter de voir ce genre de programme implémenté ailleurs.
A bon entendeur
Heahel le méchant ;)
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
5 mai 2009 à 17:36
Au contraire je suis content de voir que cela interesse et apporte un peu d'aide à certain. Si toi ou un autre avez des questions n'hesitez pas.
salrouge Messages postés 22 Date d'inscription jeudi 5 août 2004 Statut Membre Dernière intervention 5 mai 2009
5 mai 2009 à 17:34
oui tu as raison
j'avais pas vu le test commenté dans la classe principale.
tout marche tres bien
je te félicite pour ce code.
merci
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
5 mai 2009 à 17:28
Ok je comprend mieu, je n'ai pas testé mais j'ai compris ce que tu veux dire car j'avais fait le même teste quand on m'a demandé de mettre une fenetre pour afficher le chiffré. Je confirme il n'est pas possible de déchiffrer a partir de la fenetre, par contre si tu veux une preuve que l'on peut dechiffrer tu as juste à mettre en commentaire la fenetre dans la classe principale.
salrouge Messages postés 22 Date d'inscription jeudi 5 août 2004 Statut Membre Dernière intervention 5 mai 2009
5 mai 2009 à 17:22
je suis d'accord avec toi, mais je t'invite à faire le test inverse càd créer un bouton déchiffrer qui utilise la methode dechiffrer que tu as créée.
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
5 mai 2009 à 17:19
Je pense que tu dois avoir une erreur quelques part car je n'ai pas constaté d'erreur dans mon code jusqu'a maintenant.
salrouge Messages postés 22 Date d'inscription jeudi 5 août 2004 Statut Membre Dernière intervention 5 mai 2009
5 mai 2009 à 17:17
j'y ai pensé aussi et j'ai appelé la fonction de déchiffrement avec comme parametre, le résultat du chiffrement du texte entré, sans passer par une zone de texte. mais ca n'a toujours pas marché
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
5 mai 2009 à 17:13
Salut, si le txtsortie c'est un élément fénêtré il est possible que les bytes ne soient pas conservés mais convertis pour être compatible avec l'affichage dans une fenetre, toutefois je ne connais presque pas les fenêtre en java.
salrouge Messages postés 22 Date d'inscription jeudi 5 août 2004 Statut Membre Dernière intervention 5 mai 2009
5 mai 2009 à 13:57
bonjour
j'ai ajouté à ton code un btn déchiffrer, voici le code que j'ai ajouté

btdechiffer=new JButton("Dechiffrer");
btdechiffer.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
txtentree.setText(new String(rsa.dechiffrer(txtsortie.getText().getBytes())));
}
});

malheureusement le texte d'origine n'est plus retrouvé.
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
12 mars 2009 à 22:31
Salut, non il faut que e soit premier avec w pour qu'il soit inversible, donc :

!this.e.gcd(w).toString().equals("1")

http://fr.wikipedia.org/wiki/Rivest_Shamir_Adleman
imeneimene Messages postés 61 Date d'inscription mercredi 24 décembre 2008 Statut Membre Dernière intervention 10 avril 2010
12 mars 2009 à 22:28
bonjour
le test est pour vérifier que e et w sont premier entre eux , je crois qu'iul faut ajouter un autre test genre :

while ((!this.p.gcd(q).toString().equals("1"))
Merci de me répondre
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
6 mars 2009 à 21:45
Salut,

while ((!this.e.gcd(w).toString().equals("1")) || (this.e.compareTo(w) != -1 )){ // e premier avec w et e < w


A bientot
imeneimene Messages postés 61 Date d'inscription mercredi 24 décembre 2008 Statut Membre Dernière intervention 10 avril 2010
6 mars 2009 à 17:45
Bonjour ,
dans le chiffrement RSA il faut que les deux chiffres p et q soient premiers entre eux , je crois qu'il faut faire un test sur le pgcd de q et p ....ai je raison?,
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
25 févr. 2009 à 21:07
Salut, non je crois pas renseigne tout sur l'algorithme d'euclide etendu pour en savoir plus.
J'ai pas étudié cette fonction je peux pas t'en dire plus.
imeneimene Messages postés 61 Date d'inscription mercredi 24 décembre 2008 Statut Membre Dernière intervention 10 avril 2010
25 févr. 2009 à 17:32
Bonjour ,
je veux savoir est ce que l'instruction :
this.d = this.e.modInverse(w);
veux dire que d=(e puiss -1) mod w;
merci de me répondre.
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
25 janv. 2009 à 18:45
Je ne vais pas vous faire un cours sur le chiffrement de données mais en gros le premier bout de code permet de grouper tout les bytes dans un tableau et si on a depacer le nombre de byte du message de depart alors on complete avec des 0.

Les deux fonctions convertissent un entier en 4 bytes et 4 bytes en un entier.

Et je rappel que j'ai mis ce code à un niveau initié et il y a une raison....
aminablonde Messages postés 2 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 25 janvier 2009
25 janv. 2009 à 18:27
Bonjour cibberrique,
je comprend pas l'utilité de ce fragment de code :

while ( i<mess.length){
for (int j = 0; j<this.blocsize;j++){
if (i+j<mess.length)
{
bloc[j] = mess[i+j];
}
else{
bloc[j] = 0;
je vois pas a quoi sa sert;
}
}

y'a aussi sa


private byte[] intToBytes(int i){
byte res[] = new byte[4];
res[0] = (byte)((i) >>> 24);
res[1] = (byte)((i) >>> 16);
res[2] = (byte)((i) >>> 8);
res[3] = (byte)((i));
return res;
}

private int bytesToInt(byte b[]){
return (b[0] & 0xFF) << 24 |
(b[1] & 0xFF) << 16 |
(b[2] & 0xFF) << 8 |
(b[3] & 0xFF);
}
Merci de me répondre , c urgent
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
25 janv. 2009 à 16:36
Bonjour, comme je ne comprend pas exactement ta question je vais repondre aux deux possibilités que j'ai compris :

pour chiffrer en RSA tu fais : a^e mod n

sinon si c'est concernant le chiffrement que j'applique avec le graphique :
txtsortie.setText(new String(rsa.chiffrer(txtentree.getText().getBytes())));

le chiffrement ce fait sur une suite de byte concaténés pour former un grand nombre (inférieur à n)

Sinon je répéte on n'utilise pas RSA pour chiffrer des grandes quantités de données, donc on exclu le chiffrement de fichier ou de texte avec, RSA c'est bien pour chiffrer un condensé ou une clé privé par exemple.
aminablonde Messages postés 2 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 25 janvier 2009
25 janv. 2009 à 14:26
Bonjour ,
moi aussi je veux réaliser un bouton pour déchiffrer le texte déja chiffré , qulk'un peux me dire comment on enregistre un texte dans un fichier et comment le récupérer aprg aussi une question pour le développeur du code , g pas bien compri comment t'as fait pr chiffrer le texte parceke le texte en caractères alors que le chiffrement se fait sur des entiers??
Merci de me répondre
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
17 janv. 2009 à 00:11
Salut, dans le code de la classe principale rajoute a la fin :
System.out.println(rsa.getPublicKey());
System.out.println(rsa.getPrivateKey());

p et q son des attributs privés de la classe l'utilisateur n'a pas besoin de les connaitres il ne servent que au moment de la creation des clé il ne sont donc pas conservés en mémoire, si tu les veux vraiment je te laisse t'amuser a modifier le code.
chinfine23 Messages postés 3 Date d'inscription lundi 22 décembre 2008 Statut Membre Dernière intervention 25 janvier 2009
16 janv. 2009 à 21:26
salut tt le monde,c'est vraiment un code génial mais j'arrive pas à afficher les nombres p,q,clé publique et la clé privée,est ce qu'il yaune solution???
(sachant que je suis débutant en java........)
merci:chin_fine1985@hotmail.com
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
14 janv. 2009 à 20:34
Vous avez tout compris il faudrait sauvegarder le texte chiffrer dans un fichier pour pouvoir dechiffrer ensuite ce texte, et ce n'est pas le but de cette source, le but de cette source et de montrer comment fonctionne l'algorithme RSA.
Merci pour vos commentaires.
kari21 Messages postés 2 Date d'inscription mercredi 6 mai 2009 Statut Membre Dernière intervention 6 mai 2009
14 janv. 2009 à 20:31
bonjour , votre code et claire et fonctionne très bien mais j'ai une petite remarque !!! pourquoi ne pas réaliser un autre bouton déchiffrer pour déchiffrer le texte déjà chiffrer comme ça l'user pourra vérifier l'intégrité de son message bien sur en sauvegardant le texte chiffré affiché sur l'interface dans un tableau ou dans un fichier pour l'utiliser ????
imeneimene Messages postés 61 Date d'inscription mercredi 24 décembre 2008 Statut Membre Dernière intervention 10 avril 2010
13 janv. 2009 à 15:40
Bonjour ,
je trouve que votre code est hyper génial , simple et efficace , chapeau...
mais comme je suis débutante en JAVA , j'ai pas bien compris le fonctionnement de toutes les fonctions existantes , j'aimerais bien ( si tu peux bien sur) m'envoyer une explication complète sur la fonctions de chiffrement et de déchiffrement
tu peux aussi réaliser une interface pour permettre aux utilisateurs de faire entrer le mot a crypter ainsi qu'un affichage du texte crypté
Merci de me contacter sur l'adresse suivante : imeneannaba23@yahoo.fr
Rejoignez-nous