ScA*_*er2 2 java security encryption rsa
这是我目前正在使用的代码.它使用BouncyCastle Provider.
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;
}
Run Code Online (Sandbox Code Playgroud)
我现在正在接受
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)
Run Code Online (Sandbox Code Playgroud)
使用RSA加密大量数据并不是一个好习惯.
加密协议采用的方法是生成对称密钥,使用它来加密数据,然后使用RSA加密该对称密钥.
这是PGP和S/MIME的工作原理.它还允许多个读者通过加密每个预期收件人的对称密钥来轻松地解密数据,而不是加密每个读者的整个数据.