Я уверен, что есть примеры, но я их не нашел. Вот несколько советов, которые помогут вам начать. Вам нужно научиться соединять классы BC вместе. Во-первых, получите исходный код bouncycastle и будьте готовы посмотреть его, когда у вас есть вопросы. Это на самом деле очень читабельно, так что не бойтесь изучать его, когда документация оставляет желать лучшего. Например, многие классы хотят экземпляр объекта CipherParameters
, но в документации редко указывается какая-либо дополнительная информация. Однако в исходном коде будет очевидно, какие ожидающие реализации классы ожидаются.
Выберите один из механизмов AES, например AESEngine
, в качестве механизма шифрования. Далее выберите режим; ECB редко бывает правильным, поэтому, например, если вы выберете режим CBC, создайте объект CBCBlockCipher
из вашего объекта AESEngine
. Затем используйте этот объект для создания объекта PaddedBufferBlockCipher
. Конструктор по умолчанию использует заполнение PKCS7, которое идентично заполнению PKCS5, которое вы хотите. Теперь вам нужно создать объект для удержания клавиши и IV. Это интерфейс CipherParameters
. Вы создаете объект в два этапа. Сначала вы создаете объект KeyParameter
с вашим ключом. Затем вы создаете объект ParametersWithIV
с вашим объектом KeyParameter
и вашим IV. Этот объект передается методу init
объекта PaddedBufferBlockCipher
, и вы готовы к работе.
РЕДАКТИРОВАТЬ
Вот небольшой пример:
private static byte[] cipherData(PaddedBufferedBlockCipher cipher, byte[] data)
throws Exception
{
int minSize = cipher.getOutputSize(data.length);
byte[] outBuf = new byte[minSize];
int length1 = cipher.processBytes(data, 0, data.length, outBuf, 0);
int length2 = cipher.doFinal(outBuf, length1);
int actualLength = length1 + length2;
byte[] result = new byte[actualLength];
System.arraycopy(outBuf, 0, result, 0, result.length);
return result;
}
private static byte[] decrypt(byte[] cipher, byte[] key, byte[] iv) throws Exception
{
PaddedBufferedBlockCipher aes = new PaddedBufferedBlockCipher(new CBCBlockCipher(
new AESEngine()));
CipherParameters ivAndKey = new ParametersWithIV(new KeyParameter(key), iv);
aes.init(false, ivAndKey);
return cipherData(aes, cipher);
}
private static byte[] encrypt(byte[] plain, byte[] key, byte[] iv) throws Exception
{
PaddedBufferedBlockCipher aes = new PaddedBufferedBlockCipher(new CBCBlockCipher(
new AESEngine()));
CipherParameters ivAndKey = new ParametersWithIV(new KeyParameter(key), iv);
aes.init(true, ivAndKey);
return cipherData(aes, plain);
}