使用非對稱加密,無法加密數據的時間長於鍵減去填充。由於它是11個字節,我可以得出結論,您使用PKCS#1填充。你可以做的是嘗試壓縮數據,但根據數據的長度和性質,它很容易失敗。另一種選擇是對稱塊密碼(沒有限制用於數據的大小)和非對稱加密相結合:
生成隨機的AES密鑰
byte[] keyData = new byte[32];
SecureRandom random = new SecureRandom();
random.nextBytes(keyData);
加密數據與AES。
// zero filled input vector
byte[] ivData = new byte[32];
IvParameterSpec iv = new IvParameterSpec(ivData);
SecretKeySpec keySpec = new SecretKeySpec(keyData, "AES");
Cipher aes = Cipher.getInstance("AES/CBC/PKCS5Padding");
aes.init(Cipher.ENCRYPT_MODE, keySpec, iv);
byte[] cipherText = aes.doFinal(data);
AES加密密鑰(用於AES-256是32個字節),RSA私鑰。
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.WRAP_MODE, rsaKeyPair.getPublic());
byte[] wrappedKey = cipher.doFinal(keyData);
將wrappedKey與cipherText結合使用。可以通過將一個附加到另一個來完成,但也可以使用一些二進制格式。