begin process at 2012 02 04 17:22:19
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Sécurite & cryptage

 > ENCRYPTION RSA (AVEC BIGINTEGER)

ENCRYPTION RSA (AVEC BIGINTEGER)


 Information sur la source

Note :
Aucune note
Catégorie :Sécurite & cryptage Classé sous :cryptage, rsa, bigint, sécurité, clé Niveau :Initié Date de création :22/10/2004 Date de mise à jour :15/08/2009 20:42:29 Vu / téléchargé :34 992 / 1 655

Auteur : darksid

Ecrire un message privé
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

Mon programme encrypte les fichiers avec l'algorithme d'encryptions rsa, mais en utilisant java sécurité uniquement pour générer des nombre aléatoire. Il aide à la gestion des utilisateurs et encrypte(ou exclusif) les clées privé.

J'ai fais ce programme dans un plus pédagogique qu'utilitaire, les class dans le package java sécurité sont surement plus efficace.

n.b. : la class RSA a été prise sur se cite http://www.cs.princeton.edu/introcs/104crypto/RSA. java.html
mais je l'ais modifier pour l'améliorer et l'adapter à mon application

Comment RSA fonctionne:


Pour l'encryptions,

//les clés public
publicKey = privateKey modulo inverse de (pr1 - 1) * (pr2 - 1)
modulo = pr1 * pr2
//les clés privé
//nombres premier(divisible uniquement par un et eux-même) les plus grand possible
pr1
pr2
privateKey:
     * 1. n'a aucun autre diviseur que 1
     * 2. qu'il est plus grand que p1 et p2
     * 3. qu'il est plus petit que p1*p2

pour l'encryptions on coupe le message en bout et on le transforme en numérique.

sur chaque bout n on effectue l'opération suivante
n^publicKey mod modulo
La publicKey étant la clé public du destinataire.

Pour la décryptions
pour chaque bout n on effectue l'opération suivante
n^privateKey mod modulo
privateKey étant la clé privé du destinataire.

Pour plus de détailles: http://fr.wikipedia.org/wiki/Rivest_Shamir_Adleman

Source

  • package rsa;
  • /**
  • * <p>Titre : RSA </p>
  • * <p>Description : Encodage de données selon le protocole RSA </p>
  • * <p>Copyright : Copyright (c) 2004</p>
  • * @author François Bradette
  • * @version 1.1
  • * version originale de Robert Sedgewick and Kevin Wayne.Copyright © 2004
  • * pris sur le site http://www.cs.princeton.edu/introcs/104crypto/RSA.java.html
  • */
  • import java.io.*;
  • import java.math.*;
  • import java.security.*;
  • public class RSA
  • implements Serializable
  • {
  • private final static BigInteger one = BigInteger.ONE;
  • private final static SecureRandom random = new SecureRandom();
  • private BigInteger privateKey = null;
  • private BigInteger publicKey = null;
  • private BigInteger modulus = null;
  • private BigInteger p1 = null;
  • private BigInteger p2 = null;
  • //Ces variables doivent être initialisé pour l'encrytage de données.
  • private BigInteger modulusE;
  • private BigInteger publicKeyE;
  • private int N;
  • private BigInteger phi0;
  • public RSA(int N)
  • {
  • this.N = N;
  • // generate an N-bit (roughly) public and private key
  • //clés privé
  • //p1
  • p1 = BigInteger.probablePrime(N / 2, random);
  • //p2
  • p2 = BigInteger.probablePrime(N / 2, random);
  • //0
  • phi0 = (p1.subtract(one)).multiply(p2.subtract(one));
  • //
  • //n
  • modulus = p1.multiply(p2);
  • //d
  • setPrivateKey();
  • //e
  • publicKey = privateKey.modInverse(phi0);
  • modulusE = modulus;
  • publicKeyE = publicKey;
  • }
  • //renvois la variable public modulo utilisé pour l'encryption
  • // des donné
  • public BigInteger getModulus()
  • {
  • return modulus;
  • }
  • //renvois la variable public publicKey utilisé par d'autre pour l'encryption
  • public BigInteger getPublicKey()
  • {
  • return publicKey;
  • }
  • //Cette variable doit être initialisé pour être en mesure d'encrypté
  • //Ces
  • public void setPublicKey(BigInteger p, BigInteger n)
  • {
  • publicKeyE = p;
  • modulusE = n;
  • }
  • /**
  • * @param xor BigInteger
  • *
  • * Cette méthode est employer pour encrypté et pour décrypté les clées
  • * C'est l'avantage du ou exclusif il sufi de répété la même oprération pour
  • * encodé et décodé
  • **/
  • public void xOrClePrive(BigInteger xor)
  • {
  • xor = xor.pow(4);
  • privateKey = privateKey.xor(xor);
  • }
  • /**s'assure que privateKey
  • * 1. n'a aucun autre diviseur que 1
  • * 2. qu'il est plus grand que le plus grand entre p1 et p2
  • * 3. qu'il est plus petit que p1*p2
  • * */
  • private void setPrivateKey()
  • {
  • do
  • {
  • privateKey = BigInteger.probablePrime(N / 2, random);
  • }
  • while (privateKey.gcd(phi0).intValue() != 1 ||
  • privateKey.compareTo(modulus) != -1 ||
  • privateKey.compareTo(p1.max(p2)) == -1);
  • }
  • /*
  • Encrypte le message avec les clés public
  • pour l'encryption les clés public doivent etre initialisées
  • le message doit être divisé en paket de N / 8 octects ou bytes
  • */
  • public BigInteger encrypt(BigInteger message)
  • {
  • BigInteger rep = null;
  • String str_message = new String(message.toByteArray());
  • if (message != null)
  • {
  • if (str_message.length() <= (N / 8))
  • if (publicKeyE != null && modulusE != null &&
  • message.toByteArray().length < Integer.MAX_VALUE)
  • rep = message.modPow(publicKeyE, modulusE);
  • }
  • return rep;
  • }
  • public BigInteger encrypt(BigInteger message, BigInteger publicKeyP,
  • BigInteger modulusP)
  • {
  • BigInteger rep = null;
  • String str_message = new String(message.toByteArray());
  • if (str_message.length() <= (N / 8))
  • if (publicKeyP != null && modulusP != null &&
  • message.toByteArray().length < Integer.MAX_VALUE)
  • rep = message.modPow(publicKeyP, modulusP);
  • return rep;
  • }
  • //Décrypte le message avec les clés privé
  • public BigInteger decrypt(BigInteger encrypted)
  • {
  • return encrypted.modPow(privateKey, modulus);
  • }
  • public String toString()
  • {
  • String s = "";
  • s += "public = " + publicKey + "\n";
  • s += "modulus = " + modulus;
  • return s;
  • }
  • }
package rsa;

/**
 * <p>Titre : RSA </p>
 * <p>Description : Encodage de données selon le protocole RSA </p>
 * <p>Copyright : Copyright (c) 2004</p>
 * @author François Bradette
 * @version 1.1
 * version originale de Robert Sedgewick and Kevin Wayne.Copyright © 2004
 * pris sur le site http://www.cs.princeton.edu/introcs/104crypto/RSA.java.html
 */
import java.io.*;
import java.math.*;
import java.security.*;

public class RSA
    implements Serializable
{
  private final static BigInteger one = BigInteger.ONE;
  private final static SecureRandom random = new SecureRandom();

  private BigInteger privateKey = null;
  private BigInteger publicKey = null;
  private BigInteger modulus = null;

  private BigInteger p1 = null;
  private BigInteger p2 = null;

  //Ces variables doivent être initialisé pour l'encrytage de données.
  private BigInteger modulusE;
  private BigInteger publicKeyE;

  private int N;
  private BigInteger phi0;
  public RSA(int N)
  {
    this.N = N;
    // generate an N-bit (roughly) public and private key
    //clés privé
    //p1
    p1 = BigInteger.probablePrime(N / 2, random);
    //p2
    p2 = BigInteger.probablePrime(N / 2, random);
    //0
    phi0 = (p1.subtract(one)).multiply(p2.subtract(one));
    //
    //n
    modulus = p1.multiply(p2);
    //d
    setPrivateKey();
    //e
    publicKey = privateKey.modInverse(phi0);

    modulusE = modulus;
    publicKeyE = publicKey;
  }

//renvois la variable public modulo utilisé pour l'encryption
// des donné
  public BigInteger getModulus()
  {
    return modulus;
  }

//renvois la variable public publicKey utilisé par d'autre pour l'encryption
  public BigInteger getPublicKey()
  {
    return publicKey;
  }

//Cette variable doit être initialisé pour être en mesure d'encrypté
//Ces
  public void setPublicKey(BigInteger p, BigInteger n)
  {
    publicKeyE = p;
    modulusE = n;
  }

  /**
   * @param xor BigInteger
   *
   * Cette méthode est employer pour encrypté et pour décrypté les clées
   * C'est l'avantage du ou exclusif il sufi de répété la même oprération pour
   * encodé et décodé
   **/
  public void xOrClePrive(BigInteger xor)
  {
    xor = xor.pow(4);
    privateKey = privateKey.xor(xor);

  }

  /**s'assure que privateKey
   * 1. n'a aucun autre diviseur que 1
   * 2. qu'il est plus grand que le plus grand entre p1 et p2
   * 3. qu'il est plus petit que p1*p2
   * */
  private void setPrivateKey()
  {
    do
    {
      privateKey = BigInteger.probablePrime(N / 2, random);
    }
    while (privateKey.gcd(phi0).intValue() != 1 ||
           privateKey.compareTo(modulus) != -1 ||
           privateKey.compareTo(p1.max(p2)) == -1);
  }

  /*
   Encrypte le message avec les clés public
   pour l'encryption les clés public doivent etre initialisées
   le message doit être divisé en paket de N / 8 octects ou bytes
   */
  public BigInteger encrypt(BigInteger message)
  {
    BigInteger rep = null;
    String str_message = new String(message.toByteArray());
    if (message != null)
    {
      if (str_message.length() <= (N / 8))
        if (publicKeyE != null && modulusE != null &&
            message.toByteArray().length < Integer.MAX_VALUE)
          rep = message.modPow(publicKeyE, modulusE);
    }
    return rep;
  }

  public BigInteger encrypt(BigInteger message, BigInteger publicKeyP,
                            BigInteger modulusP)
  {
    BigInteger rep = null;
    String str_message = new String(message.toByteArray());

    if (str_message.length() <= (N / 8))
      if (publicKeyP != null && modulusP != null &&
          message.toByteArray().length < Integer.MAX_VALUE)
        rep = message.modPow(publicKeyP, modulusP);

    return rep;
  }

  //Décrypte le message avec les clés privé
  public BigInteger decrypt(BigInteger encrypted)
  {
    return encrypted.modPow(privateKey, modulus);
  }

  public String toString()
  {
    String s = "";
    s += "public  = " + publicKey + "\n";
    s += "modulus = " + modulus;
    return s;
  }
}

 Conclusion

Pour l'instant il n'y a pas de bug connus, mais les passwords sont seulement décoratifs(ils ne sont pas validé pour l'instant :) mais ca ne nuis pas au fonctionnement du programme ). Pour avoir plus de détaille sur le fonctionnement de mon logiciel vous pouvez faire un tour sur mon site web http://darksid1.no-ip.biz/Darksid1/Index.jsp

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

09 août 2009 21:32:31 :
Ajout d'explication sur la méthode d'encryptions.
15 août 2009 20:42:30 :
J'ai actualisé les interfaces et j'ai activé la vérification des mots de passe.

 Sources du même auteur

Source avec Zip SERVEUR/CLIENT D'APPLICATION
Source avec Zip Source avec une capture CHAT RMI 2
Source avec Zip Source avec une capture REMOTE METHODE INVOCATION : CHAT

 Sources de la même categorie

Source avec Zip Source avec une capture CRYPTEUR-DÉCRYPTEUR AES par dragooon74
Source avec Zip UNE IMPLÉMENTATION DE RSA (RIVEST SHAMIR ADLEMAN) AVEC DES ... par lemout
Source avec Zip EVALUER LA QUALITÉ D'UN MOT DE PASSE par Julien39
Source avec Zip CASSER UN MOT DE PASSE par Julien39
Source avec une capture FONCTION DE CRYPTAGE EN JAVA par supergrandebutant

 Sources en rapport avec celle ci

Source avec Zip UNE IMPLÉMENTATION DE RSA (RIVEST SHAMIR ADLEMAN) AVEC DES ... par lemout
Source avec Zip CHIFFREMENT RSA (RIVEST SHAMIR ADLEMAN) par ciberrique
Source avec Zip Source avec une capture STEGANOGRAPHIE & RSA, SWT par the_wwt
CHARCRYPT par CHAR As Human
GÉNÉRER DU P7M OU PKCS#7 par Syruis

Commentaires et avis

Commentaire de Syruis le 07/07/2005 15:31:53

Salut,

c possible de faire du pkcs#7?

Merci d'avance.

Syruis

Commentaire de darksid le 07/07/2005 17:21:38

Je ne m'en suis pas servit mais oui ça dois être possible en java.

Commentaire de menjra2000 le 04/11/2005 20:30:51

j'ai j creator et j'aimerai bien savoir la procedure exacte pour compiler et executer ce programme

Commentaire de darksid le 05/11/2005 01:32:40

Salut je n'ai pas réussi à téléchargé jCreator(un problème avec mon couriel), mais tu peux essayer de créer un workspace, un projet et d'ajouter source.

Si tu as d'autres questions ou problèmes ne te gène pas.

Commentaire de maggie2008 le 10/07/2009 11:09:29

salut,  ça signifie  quoi le modulo dans ton application??

Commentaire de darksid le 10/07/2009 18:01:43

x mod y = x - y*floor(x/y)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

[cryptage] Fusionner un code RSA et un reso TCP [ par ckiki93 ] [cryptage] Fusionner un code RSA et un reso TCP [ par ckiki93 ] Dsl pour le post Vide precedent....1-Les codes sources sont Correct. mon probleme ? 2-je voudrais réaliser le cryptage sur un reseau TCP Serveur Clien URGENT, SVP, BESOIN DE BI-CLES RSA [ par othland ] bjr tlmje sais que ma question est mal plac&#233;e!!!SVP, aidez moi, c'est vraiment urgent, j'ai besoin d'une petite application qui me g&#233;n&#232; sécurité et donnée confidentiel [ par syphillis ] Bonjour à tous,je suis actuellement en stage d'informatique et j'ai réalisé une applet d'upload d'image en java.Dans mon programme je dois donc envoye cryptage clé publique/clé privée [ par bygui ] Bonjour,Je cherche à crypter une chaine de caractères pour permettre une communication client/serveur. Que dois-je utiliser pour cela? Cryptage [ par didoux95 ] Bonjour a tous.je cherche une methode de crytage de texte qui soit simple a mettre en oeuvre et efficace (qui fonctionne qu'avec une seul clef).Sur in Cryptage de texte [ par le_totophe ] Bonjour à tous, je voudrais crypter des mots de passe afin de les sauvegarder dans un fichier ini. Donc en fait, il faudrait que ce cryptage puisse êt Cryptage mot de passe [ par Erwan76 ] Bonjour à tous les codes sourciens! :-))j'utilise un jFrame qui contient des jLabel , des boutons et quelques jTextField...Jusque là çà va. Ce que j'a Cryptage [ par PCBill ] Bonjour ;Je voudrais implémenter un code en Java procédant aux cryptages et au décryptage des fichiers (word, pdf, html...etc).Toute aide (suggesstion tourner en fond de tache (comme service Win.) / détecter une clé USB [ par budhax ] Je dois réaliser une application en Java qui (entre autres), doit:- tourner en fond de tâche comme une Service Windows.- tester toute les 5 min. si un


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,874 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales