Ceci est le code que j'utilise actuellement. Il utilise le fournisseur BouncyCastle.Comment crypter un objet java.util.Properties (quelle que soit sa taille) à l'aide d'une clé publique RSA?
static
{
Security.addProvider(new BouncyCastleProvider());
}
protected String encrypt(byte[] keyData, byte[] data) throws Exception {
X509EncodedKeySpec keyspec = new X509EncodedKeySpec(keyData);
KeyFactory kf = KeyFactory.getInstance("RSA", "BC");
PublicKey pk = kf.generatePublic(keyspec);
Cipher rsa = Cipher.getInstance("RSA/None/OAEPWithSHA1AndMGF1Padding", "BC");
rsa.init(Cipher.ENCRYPT_MODE, pk);
byte[] output = rsa.doFinal(data);
String result = base64EncodeBytes(output);
return result;
}
Je reçois actuellement un
java.lang.ArrayIndexOutOfBoundsException: too much data for RSA block
at org.bouncycastle.jce.provider.JCERSACipher.engineDoFinal(Unknown Source)
at javax.crypto.Cipher.doFinal(DashoA13*..)
at Encryption.encrypt(RSAToken.java:60)
L'utilisation de NoPadding n'est pas sécurisée. Utilisez OAEP si vous le pouvez, padding PKCS # 1 (ver 1.5) si vous ne pouvez pas. – erickson
Je l'ai mis à jour pour utiliser OAEPWithSHA1AndMGF1Padding. Merci pour le conseil. C'est ma première entreprise dans le cryptage. Les données que nous chiffrons (données de licence) ne sont pas critiques, mais plus j'en apprends, mieux c'est. – ScArcher2