Bonjour à tous,

J'ai un code me permettant de crypter un tableau de byte à l'aide d'une clé RSA:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] chumpData = new byte[CHUMP_SIZE];
int position = 0;
while(position < data.length) {
   System.arraycopy(data, position, chumpData, 0, Math.min(data.length-position, CHUMP_SIZE));
   byte[] codedChump = cipher.doFinal(chumpData);
   System.arraycopy(codedChump, 0, encryptData, position, Math.min(encryptData.length - position, CHUMP_SIZE));
   position += CHUMP_SIZE;
}
Et pour le décodage:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] chumpData = new byte[CHUMP_SIZE];
int position = 0;
while(position < data.length) {
   System.arraycopy(data, position, chumpData, 0, Math.min(data.length-   position, CHUMP_SIZE));
   System.arraycopy(data, position, chumpData, 0, Math.min(data.length-position, CHUMP_SIZE));
   byte[] decodedChump = cipher.doFinal(chumpData);
   System.arraycopy(decodedChump, 0, decodedData, position, decodedChump.length);
   position += CHUMP_SIZE;
}
La boucle while sert à contourner le fait que RSA veut que les données ait une taille bien précise pour pouvoir être décodées. A la base, je ne les avais pas, mais ça ne fonctionnait pas non plus. Cipher voulait des données d'une taille de 53 octets précisément.


Mais quand je veux décoder ce que je viens de coder, je récupère l'exception BadPaddingException avec le message Data must start with zero.

Est-ce que quelqu'un pourrait éclairer ma lanterne ?

Merci d'avance