Dies ist der Code, den ich derzeit verwende. Es verwendet den BouncyCastle Provider.Wie kann ich ein java.util.Properties-Objekt (mit beliebiger Größe) mit einem öffentlichen RSA-Schlüssel verschlüsseln?
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;
}
ich zur Zeit ein immer
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)
Die Verwendung von NoPadding ist unsicher. Verwenden Sie OAEP, wenn Sie können, PKCS # 1 Padding (ver. 1.5), wenn Sie nicht können. – erickson
Ich habe es aktualisiert, um OAEPWithSHA1AndMGF1Padding zu verwenden. Danke für den Tipp. Dies ist mein erstes Unterfangen in Verschlüsselung. Die Daten, die wir verschlüsseln (Lizenzdaten), sind nicht kritisch, aber je mehr ich darüber lerne, desto besser. – ScArcher2