Rechercher : dans
Par :

Un cryptage asymétrique rsa

Dernière réponse le 8 mai 2008 à 18:18:05 Gad_007, le 17 nov 2006 à 12:29:10 
 Signaler ce message aux modérateurs

Bonjour!

J'aimerais obtenir un générateur de clé basé sur l'algorithm RSA fournit par Cryptix. J'utilise Eclipse 3.1.2 ainsi que le jdk 1.5 sous Windows xp.
J'écris BaseRSAKeyPairGenerator RSAgenClé = (BaseRSAKeyPairGenerator) KeyPairGenerator.getInstance("RSA","Cryptix");
Et cette ligne lance l'exception suivante:
java.security.KeyPairGenerator$Delegate

Est ce que quelqu'un a déjà eu le problème et a su le résoudre?
Est-ce que cela aurait un rapport avec le jdk utilisé ?

Merci d'avance pour vos réponses :-)

Meilleures réponses pour « un cryptage asymétrique rsa » dans :
Logiciels de Cryptographie et Stéganographie Voir1. Cryptographie 1.1 Cryptozor 1.2 Krypto Zone 1.3 TrueCrypt 1.4 FlashCrypt 1.5 Autres logiciels 2. Stéganographie 2.1 JPEGX 2.2 Autres logiciels 1. Cryptographie Pour bien comprendre le principe de la cryptographie, je vous...
Télécharger Crypt Edit VoirCrypt Edit est un puissant éditeur de texte en remplacement à Windows NotePad et WordPad. Il comprend des fonctions intéressantes telles que la cryptographie (algorithmes RC4, MD5). Il peut également exporter facilement les documents au format...
Télécharger Crypt For Free Voirc'est un utilitaire gratuit de cryptage de données.Vous pourrez crypter vos fichier en utilisant trois algorithmes de chiffrages, le Blowfish (448 bits), AES (256 bits) et DESX (128 bits). Vous pourrez envoyer des courriels chiffrés via le module...
Le chiffrement avec RSA Voirle système RSA Le premier algorithme de chiffrement à clé publique (chiffrement asymétrique) a été développé par R.Merckle et M.Hellman en 1977. Il fut vite rendu obsolète grâce aux travaux de Shamir, Zippel et Herlestman, de célèbres...
Cryptographie VoirPourquoi la cryptographie? L'homme a toujours ressenti le besoin de dissimuler des informations, bien avant même l'apparition des premiers ordinateurs et de machines à calculer. Depuis sa création, le réseau Internet a tellement évolué qu'il est...
Cryptographie - Enigma Voir"N’accordez jamais une confiance aveugle à un système de cryptographie " - Gilles Dubertret L'histoire de Enigma C'est à la fin de la première guerre mondiale qu'est apparue la nécessité de crypter les messages (bien que les techniques de...

1

 karim1506, le 8 mai 2008 à 18:18:05
  • +2

Bonjour,
package myrsa;
import java.io.*;
import java.math.*;
import javax.crypto.*;
import java.security.*;
import java.security.spec.*;
import java.security.interfaces.*;
import java.math.BigInteger;


/**
* Cette classe propose des méthodes permettant de crypter et décrypter des
* messages avec l'algorithme RSA. Le message doit cependant être plus petit
* que KEY_SIZE.
*/


/**
*
* @author kerim
*/
public class MyRsa {public final static int KEY_SIZE = 1024; // [512..2048]

private RSAPublicKey publicKey;
private RSAPrivateKey privateKey;


public MyRsa() {
}


public RSAPublicKey getPublicKey() {
return publicKey;
}


public byte[] getPublicKeyInBytes() {
return publicKey.getEncoded();
}


public RSAPrivateKey getPrivateKey() {
return privateKey;
}


public byte[] getPrivateKeyInBytes() {
return privateKey.getEncoded();
}


public void setPublicKey(RSAPublicKey publicKey) {
this.publicKey = publicKey;
}


public void setPublicKey(byte[] publicKeyData) {
try {
X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(publicKeyData);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
publicKey = (RSAPublicKey)keyFactory.generatePublic(publicKeySpec);
}
catch (Exception e) {System.out.println(e);}
}


public void setPrivateKey(RSAPrivateKey privateKey) {
this.privateKey = privateKey;
}


public void setPrivateKey(byte[] privateKeyData) {
try {
PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(privateKeyData);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
privateKey = (RSAPrivateKey)keyFactory.generatePrivate(privateKeySpec);
}
catch (Exception e) {System.out.println(e);}
}


public void generateKeyPair() {
try {
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
keyPairGen.initialize(KEY_SIZE, new SecureRandom());
KeyPair kp = keyPairGen.generateKeyPair();
publicKey = (RSAPublicKey)kp.getPublic();
privateKey = (RSAPrivateKey)kp.getPrivate();



}
catch (Exception e) {System.out.println(e);}
}


public byte[] crypt(byte[] plaintext) {
return crypt(new BigInteger(addOneByte(plaintext))).toByteArray();

}


public byte[] crypt(String plaintext) {
return crypt(plaintext.getBytes());
}


public byte[] decryptInBytes(byte[] ciphertext) {
return removeOneByte(decrypt(new BigInteger(ciphertext)).toByteArray());
}


public String decryptInString(byte[] ciphertext) {
return new String(decryptInBytes(ciphertext));
}


/**
* Cette méthode permet de tester le bon fonctionnement des autres.
*/
public static void main(String[] args) {
String plaintext = "issam";
System.out.println("plaintext = " + plaintext);
MyRsa rsa = new MyRsa();
rsa.generateKeyPair();

byte[] publicKey = rsa.getPublicKeyInBytes();
byte[] privateKey = rsa.getPrivateKeyInBytes();

byte[] ciphertext = rsa.crypt(plaintext);

System.out.println("ciphertext = " + new BigInteger(ciphertext));

// rsa.setPublicKey(publicKey);
// rsa.setPrivateKey(privateKey);
String plaintext2 = rsa.decryptInString(ciphertext);
System.out.println("plaintext2 = " + plaintext2);
if (!plaintext2.equals(plaintext)) System.out.println("Error: plaintext2 != plaintext");
}


private BigInteger crypt(BigInteger plaintext) {
return plaintext.modPow(publicKey.getPublicExponent(), publicKey.getModulus());
}


private BigInteger decrypt(BigInteger ciphertext) {
return ciphertext.modPow(privateKey.getPrivateExponent(), privateKey.getModulus());
}


/**
* Ajoute un byte de valeur 1 au début du message afin d'éviter que ce dernier
* ne corresponde pas à un nombre négatif lorsqu'il sera transformé en
* BigInteger.
*/
private static byte[] addOneByte(byte[] input) {
byte[] result = new byte[input.length+1];
result[0] = 1;
for (int i = 0; i < input.length; i++) {
result[i+1] = input[i];
}
return result;
}


/**
* Retire le byte ajouté par la méthode addOneByte.
*/
private static byte[] removeOneByte(byte[] input) {
byte[] result = new byte[input.length-1];
for (int i = 0; i < result.length; i++) {
result[i] = input[i+1];
}
return result;
}}

Répondre à karim1506