Voici mes constantesObtenir IllegalBlockSize en essayant de chiffrer les données trop
//Encryption fields
/** Algorithm=RSA Mode=ECB Padding=PKCS1Padding*/
public static final String ALGORITHM_MODE_PADDING = "RSA/ECB/PKCS1Padding";
/** Algorithm=RSA */
public static final String ALGORITHM = "RSA";
/** Provider=BouncyCastle */
public static final String PROVIDER = "BC";
/** Key size for the public and private keys */
public static final int KEY_SIZE = 1024;
J'ai fait deux clés publiques/privées comme ceci:
//Generate the keys
KeyPairGenerator kpg = KeyPairGenerator.getInstance(ALGORITHM,PROVIDER);
kpg.initialize(KEY_SIZE);
KeyPair kp = kpg.generateKeyPair();
PublicKey pubk = kp.getPublic();
PrivateKey prvk = kp.getPrivate();
Je suis Décryptage comme ceci:
byte[] privateKey = Base64.decodeBase64(pKey); //decode
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKey);
KeyFactory factory = KeyFactory.getInstance(ALGORITHM,PROVIDER);
PrivateKey privKey = factory.generatePrivate(keySpec);
Cipher cipher = Cipher.getInstance(ALGORITHM_MODE_PADDING);
cipher.init(Cipher.ENCRYPT_MODE, privKey);
return cipher.doFinal(data);
Cela fonctionne avec de petites quantités de données, lorsque les données deviennent plus grandes telles que 263 octets en cas d'échec avec une exception IllegalBlockSizeException. Je pense que c'est parce que les données sont supérieures à 256 octets mais c'est juste une supposition et je n'ai aucune idée de la façon de le réparer.
Qu'est-ce que je fais mal?
je l'ai changé d'utiliser la méthode de mise à jour, mais toujours le même problème:
// encryption pass
cipher.init(Cipher.ENCRYPT_MODE, privKey);
byte[] cipherText = new byte[cipher.getOutputSize(data.length)];
int ctLength = cipher.update(data, 0, data.length, cipherText, 0);
ctLength += cipher.doFinal(cipherText, ctLength);
Je suis en train de mettre en œuvre les signatures numériques de la manière. Le client a la clé publique et le serveur a la clé privée.
Non lié, mais si vous voulez chiffrer des données et que vous utilisez RSA, pourquoi utilisez-vous une clé privée pour le chiffrement? – Krystian
Bon point, j'ai raté ça. –
@krystian alors que devrais-je utiliser par opposition à RSA? Le cryptage et le décryptage sont effectués à des moments différents sur différents appareils – jax