2015-07-06 6 views
4

Что такое режим заполнения для AES/GCM? Я понял, что это может быть NoPadding, так как в режиме ECB это может быть PKCS5Padding, как в режиме GCM? в интерфейсе JCE нам нужно предоставить «алгоритм/режим/дополнение» (Reference).Может ли PKCS5Padding находиться в режиме AES/GCM?

Таким образом, я использовал следующий код, чтобы получить экземпляр, и он работает в JDK, но не в IBM SDK, который говорит

не может найти поставщика для поддержки AES/GCM/PKCS5Padding

Cipher.getInstance("AES/GCM/PKCS5Padding"); 

Что такое реальный вариант использования для заполнения?

+1

Padding описывает, как блоки в цепочке выравниваются и заполняются в соответствии с ожидаемым размером блока. JRE может работать с различным поставщиком безопасности. Oracle SDK включает в себя его очень низкий безопасный США приятный Oracle Security Provider. Я не знаю, какой Security Prodiver используется по умолчанию в IBM SDK. Лучшей практикой является включение вашего собственного поставщика безопасности при работе с различными поставщиками JRE, такими как BouncyCastle. Или используйте поставщика безопасности целевой системы в системе dev, например, когда вы разрабатываете для android, где OpenSSl Security Provider по умолчанию. Надеюсь, что поможет –

+1

Это лучший поставщик услуг безопасности, который я знаю: https://www.bouncycastle.org/java.html –

+0

Спасибо за ответ, мне не нужно вводить 3-ий libs. поэтому мне нужно использовать встроенный провайдер JDK. как SUNJCE, но в IBM sdk, я предполагаю, что он предоставляет своего собственного провайдера, но, на мой вопрос, действительно ли «AES/GCM/PKCS5Padding» является юридическим значением? Я не нашел примера использования PKCS5Padding в GCM и даже http://isaacyang1988.googlecode.com/svn/trunk/Crypt/src/org/bouncycastle/jce/provider/test/AESTest.java в этой статье есть тестовый пример это неправильный шаблон –

ответ

9

GCM - это потоковый режим, который означает, что зашифрованный текст имеет длину до тех пор, пока не будет открыт (не включая тег аутентификации). GCM не требует заполнения. Это означает, что версия PKCS5Padding на самом деле является лишь синонимом NoPadding для удобства во время программирования. У некоторых провайдеров нет этого странного режима.

Это случаи, когда заполнение открытого текста имеет смысл. Например, вы можете скрыть длину фактического открытого текста путем добавления произвольной длины PKCS5Padding.

+0

Спасибо, что говорит, что нам нужно правильно установить Cipher.getInstance («AES/GCM/NoPadding»); правильно? –

+0

Да, 'Cipher.getInstance (« AES/GCM/NoPadding »);' является правильным способом. Вероятно, это то же самое, что с 'Cipher.getInstance (« RSA/ECB/PKCS1Padding »);' на самом деле это только 'Cipher.getInstance (« RSA/None/PKCS1Padding »);'. –

+0

Получил это. Огромное спасибо. –