Переопределить шифрование AES с использованием сторонней библиотеки Java без ограничений законодательства США - PullRequest
2 голосов
/ 06 октября 2010

Я реализовал шифрование AES с определенными параметрами, специфичными для задачи, используя стандартные инструменты Java и поставщика BouncyCastle для конкретного алгоритма AES.

Вот код:

private byte[] aesEncryptedInfo(String info) throws UnsupportedEncodingException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidParameterSpecException, InvalidAlgorithmParameterException, NoSuchProviderException {
    Security.addProvider(new BouncyCastleProvider());
    SecretKey secret = new SecretKeySpec(CUSTOMLONGSECRETKEY.substring(0, 32).getBytes(), "AES");
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC");
    cipher.init(Cipher.ENCRYPT_MODE, secret, new IvParameterSpec(VECTOR_SECRET_KEY.getBytes()));
    return cipher.doFinal(info.getBytes("UTF-8"));
}

В некоторых средах этот код требует специальных файлов политики. См. Связанный вопрос: InvalidKeyException Недопустимый размер ключа

Моя цель - переопределить ее с помощью сторонней библиотеки, в идеале я бы использовал надувной замок, который уже используется в качестве провайдера. В библиотеке не должно быть ограничений стандартных файлов политик Java. Другими словами, не должно быть никаких ограничений.

Пожалуйста, предложите в своих ответах, как переопределить его, используя BouncyCastle или другую стороннюю библиотеку, которая может работать без указанных ограничений. В идеале я бы увидел код: -)

Большое спасибо за чтение!

После задержки я теперь с удовольствием выложу решение. Надеюсь, что кто-то может извлечь из этого пользу, потому что документация Bouncy Castle не содержит много примеров: -)

private byte[] aesEncryptedInfo(String info)
// Creating AES/CBC/PKCS7Padding cipher with specified Secret Key and Initial Vector
PaddedBufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new CBCBlockCipher(new AESEngine()), new PKCS7Padding());
cipher.init(true, new ParametersWithIV(new KeyParameter(CUSTOMLONGSECRETKEY.getBytes()), VECTOR_SECRET_KEY.getBytes()));

byte[] inputData = info.getBytes("UTF-8");
int outBlockSize = cipher.getOutputSize(inputData.length);
byte[] outputData = new byte[outBlockSize];

int outLength = cipher.processBytes(inputData, 0, inputData.length, outputData, 0);
outLength += cipher.doFinal(outputData, outLength);
if (outLength != outBlockSize) {
    return Arrays.copyOf(outputData, outLength);
}
else {
    return outputData;
}    

}

Кстати, я обнаружил два отличия между Java API и Bouncy Castle API: 1. Надувной замок использует композицию объектов для создания необходимого шифра. В то время как Java API использует строку для определения необходимого шифра. 2. Код шифрования BC немного больше, а код Java API более компактен.

Решение - полная замена оригинальной реализации Java API - доказательством является пользовательский модульный тест, который я сделал.

Ответы [ 3 ]

3 голосов
/ 11 октября 2010

Используйте легкий крипто API Bouncycastle напрямую , а не через интерфейс Java JCE.Bouncycastle включает в себя собственный крипто API, доступный через различные классы в org.bouncycastle.* пакетах.Он также реализует интерфейс провайдера JCE, чтобы сделать некоторые его криптографические реализации доступными через стандартные классы JCE, такие как Cipher, KeyGenerator и т. Д.

Ограничения политики криптографии применяются классами JCE, а не bouncycastle,Поэтому, если вы не используете эти классы, вы не встретите никаких ограничений.С другой стороны, вы пожертвуете переносимостью.Чтобы начать, взгляните на javadoc для класса AESEngine и остальные javadoc для надувного замка .

1 голос
/ 06 октября 2010

Почему нельзя просто добавить необходимые файлы политики?

Это было бы проще всего сделать.Если вы живете в США и экспортируете свое программное обеспечение в другие (возможно, «недопустимые») страны, у вас (теоретически) возникнут проблемы в любом случае (включая файлы политики / выполнение шифрования самостоятельно).

Если вы живете за пределами США, зачем даже беспокоиться об этом, просто включите файлы политики, никого не волнует.

0 голосов
/ 06 октября 2010

Нет варианта покупки инструментария? RSA BSAFE

...