Получение IllegalBlockSize при попытке зашифровать слишком много данных

Вот мои константы

//Encryption fields
/** Algorithm=RSA Mode=ECB Padding=PKCS1Padding*/
public static final String ALGORITHM_MODE_PADDING = "RSA/ECB/PKCS1Padding";
/** Algorithm=RSA */
public static final String ALGORITHM = "RSA";
/** Provider=BouncyCastle */
public static final String PROVIDER = "BC";
/** Key size for the public and private keys */
public static final int KEY_SIZE = 1024;

Я обнародовал два / закрытые ключи как это:

//Generate the keys
KeyPairGenerator kpg = KeyPairGenerator.getInstance(ALGORITHM,PROVIDER);
kpg.initialize(KEY_SIZE);
KeyPair kp = kpg.generateKeyPair();
PublicKey pubk = kp.getPublic();
PrivateKey prvk = kp.getPrivate();

Я дешифрую как это:

byte[] privateKey = Base64.decodeBase64(pKey); //decode
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKey);
KeyFactory factory = KeyFactory.getInstance(ALGORITHM,PROVIDER);
PrivateKey privKey = factory.generatePrivate(keySpec);
Cipher cipher = Cipher.getInstance(ALGORITHM_MODE_PADDING);
cipher.init(Cipher.ENCRYPT_MODE, privKey);
return cipher.doFinal(data);

Это работает с небольшими объемами данных, когда, когда данные становятся больше, такие как 263 байта если сбои с IllegalBlockSizeException. Я думаю, что это вызвано тем, что данные больше, чем 256 байтов, но это - просто предположение, и я понятия не имею о том, как зафиксировать их.

Что я делаю неправильно?

Я изменил его, чтобы использовать метод обновления, но все еще иметь ту же проблему:

// encryption pass
cipher.init(Cipher.ENCRYPT_MODE, privKey);
byte[] cipherText = new byte[cipher.getOutputSize(data.length)];
int ctLength = cipher.update(data, 0, data.length, cipherText, 0);
ctLength += cipher.doFinal(cipherText, ctLength);

Я пытаюсь реализовать цифровые подписи между прочим. У клиента есть открытый ключ, и сервер имеет закрытый ключ.

1
задан Unihedron 2 November 2014 в 06:55
поделиться

1 ответ

Вы не можете использовать RSA для шифрования большего количества данных, чем размер в байтах модуля - 11. Это, вероятно, то, что вы ищете.

2
ответ дан 2 September 2019 в 23:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: