Вам необходимо использовать AES для шифрования больших данных.RSA не может зашифровать данные, превышающие размер ключа.Таким образом, вы можете зашифровать ключ AES с помощью RSA, а весь образ - с помощью AES (256 бит) (т. Е. Сгенерировать разные ключи AES для каждого изображения).
Также RSA очень медленный и, следовательно, не подходит для шифрования больших данных, если вы хотите разделить изображение на большое количество блоков размером 117 байт и зашифровать их один за другим.
Например:
public static byte[] encrypt(byte[] data) {
try {
KeyPair keyPair = initalizeKeyPair();
final javax.crypto.Cipher rsa = javax.crypto.Cipher.getInstance("RSA");
rsa.init(javax.crypto.Cipher.ENCRYPT_MODE, keyPair.getPublic());
SecureRandom random = new SecureRandom();
final byte[] secretKey = new byte[16];
random.nextBytes(secretKey);
final javax.crypto.Cipher aes = javax.crypto.Cipher.getInstance("AES");
SecretKeySpec k = new SecretKeySpec(secretKey, "AES");
aes.init(javax.crypto.Cipher.ENCRYPT_MODE, k);
final byte[] ciphedKey = rsa.doFinal(secretKey);
final byte[] ciphedData = aes.doFinal(data);
byte[] result = new byte[256 + ciphedData.length];
System.arraycopy(ciphedKey, 0, result, 0, 256);
System.arraycopy(ciphedData, 0, result, 256, ciphedData.length);
return result;
} catch (... e) {
throw new SomeException(e);
}
}