RSA : Too much data for RSA block
Bonjour tout le monde,
J'ai un petit soucis de chiffrement RSA.
Je me fabrique une clé RSA à partir de données récupérée d'un autre soft qui a généré ses clés grâce au m et e :
Code:
1 2 3 4 5
| BigInteger m = new BigInteger(parts[0]);
BigInteger e = new BigInteger(parts[1]);
RSAPublicKeySpec keySpec = new RSAPublicKeySpec(m, e);
KeyFactory fact = KeyFactory.getInstance("RSA");
PublicKey pubKey = fact.generatePublic(keySpec); |
J'essaie ensuite de chiffre des données grâce au code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
public byte[] encrypt(byte[] input, PublicKey pubKey) {
try {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
return cipher.doFinal(newInput);
}
catch (Exception e) {
e.printStackTrace();
return null;
}
} |
Mais sur la ligne doFinal, j'obtiens toujours une exception :
ArrayIndexOutOfBoundsException: too much data for RSA. block.
Une idée d'où cela peut provenir ?
Merci d'avance pour votre aide !!!
too much data for RSA block
bonsoir;
j'utilise la cryptographie avec Bouncy Castle.
Je voudrais échanger des informations cryptés entre un client/serveur.
pour le cryptage coté client pas de problème, mais pour le décryptage coté serveur j'ai un message d'erreur:
client:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| String message="blablablablabla";
Socket sc=new Socket("127.0.0.1",5435);
PrintWriter fout=new PrintWriter(new OutputStreamWriter(sc.getOutputStream()));
try{
Cipher cipherencrypt = Cipher.getInstance("RSA/ECB/PKCS1Padding", "BC");
cipherencrypt.init(Cipher.ENCRYPT_MODE, publickeyclient);
byte[] encrypted = cipherencrypt.doFinal(message.getBytes());
String messagecrypté =new String(encrypted);
fout.write(messagecrypté );
fout.close();
} catch (Exception e) {
} |
coté serveur:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
BufferedReader fin=new BufferedReader(new InputStreamReader(socketserver.getInputStream()));
String messagecrypte=fin.readLine();
byte [] encrypted2=messagecrypte.getBytes();
try{
Cipher cipherdecrypt = Cipher.getInstance("RSA/ECB/PKCS1Padding", "BC");
cipherdecrypt.init(Cipher.DECRYPT_MODE, privatekeyclient);
byte[] decrypted = cipherdecrypt.doFinal(encrypted2);
System.out.println("message décrypter :"+new String(decrypted));
fin.close();
sc.close(); |
un message d'erreur afficher sur l'écrant est:
java.lang.ArrayIndexOutOfBoundsException: too much data for RSA block
at org.bouncycastle.jce.provider.JCERSACipher.engineDoFinal(Unknown Source)
at javax.crypto.Cipher.doFinal(Cipher.java:2086)
at clientserveur.Requette.run(Serveur.java:179)
merci.