2
這是我目前使用的代碼。它使用BouncyCastle提供程序。如何使用RSA公鑰加密java.util.Properties對象(可以是任何大小)?
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;
}
我目前得到一個
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)
使用NoPadding是不安全的。如果可以,請使用OAEP,如果不能,則使用PKCS#1填充(版本1.5)。 – erickson 2009-05-27 15:40:38
我更新它使用OAEPWithSHA1AndMGF1Padding。謝謝你的提示。這是我第一次加密。我們正在加密的數據(許可證數據)並不重要,但我對它的瞭解越多越好。 – ScArcher2 2009-05-27 16:21:06