|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
ENCRYPTION RSA (AVEC BIGINTEGER)
Information sur la source
Description
Mon programme encrypte les fichiers avec l'algorithme d'encryption rsa, mais en utilisant java security 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écurity 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'amiliorer et l'adapter à mon application
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;
}
}
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
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
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ée!!!SVP, aidez moi, c'est vraiment urgent, j'ai besoin d'une petite application qui me génè
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
Diagramme de classes d'un logiciel de backup de clé USB? [ par budhax ]
Bonjour,Pour partir sur une bonne base, je cherche en vain à modéliser (diag. de classes) mon projet décrit dans ce cahier des charges (2 pages):<a
|
Téléchargements
Logiciels à télécharger sur le même thème :
|