java - 如何使用 RSA 公钥加密 java.util.Properties 对象(可以是任意大小)?

标签 java security encryption rsa

这是我当前正在使用的代码。它使用 BouncyCaSTLe 提供程序。

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)

最佳答案

使用 RSA 加密大量数据并不是一个好的做法。

加密协议(protocol)采用的方法是生成对称 key ,用它来加密数据,然后使用 RSA 对该对称 key 进行加密。

这就是 PGP 和 S/MIME 的工作原理。它还可以轻松地允许多个读者解密数据——通过加密每个预期接收者的对称 key ,而不是加密每个接收者的整个数据。

关于java - 如何使用 RSA 公钥加密 java.util.Properties 对象(可以是任意大小)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/916061/

相关文章:

security - 在 C/C++ 中加密文本文件的最佳方法是什么?

java - Web服务器套接字编程

java - 使数组中的所有值唯一

java - 这个 AES 128 加密有什么问题?

security - 安全地存储访问 token

encryption - openpgp golang gpg 库的问题

iphone - 安全/加密的 PDF : iOS 4. 3 显示空白页

java - 可以从普通的 Java 类调用 Controller 吗

java - 用 { } 传递参数信息

android - Android 手机上安装的第 3 方应用程序是否有任何方法可以破解 Android 手机和 Android Wear watch 之间的数据?