Cipher
объекты получаются с использованием одного из Cipher getInstance()
статические фабричные методы .Здесь имя алгоритма немного отличается от имени других классов движка тем, что оно определяет не только имя алгоритма, но и «преобразование».Преобразование - это строка, описывающая операцию (или набор операций), которая должна быть выполнена с заданным входом для получения некоторого вывода.Преобразование всегда включает в себя имя криптографического алгоритма (например, DES
) и может сопровождаться схемой режима и заполнения.
Преобразование имеет вид:
- " алгоритм / режим / заполнение " или
- " алгоритм "
Например, допустимыми являются следующие преобразования:
"DES/CBC/PKCS5Padding"
"DES"
Еслитолько если указано имя преобразования, система определит, существует ли реализация запрошенного преобразования, доступная в среде, и, если существует более одного, возвращается предпочтительное.
Если оба преобразованияЕсли указано имя и поставщик пакета, система определит, есть ли реализация запрошенного преобразования в запрошенном пакете, и выдаст исключение, если его нет.
Если режим или заполнение не заданыиспользуются определенные для поставщика значения по умолчанию для режима и схемы заполнения. Например, поставщик SunJCE
использует ECB
в качестве режима по умолчанию и PKCS5Padding
в качестве схемы заполнения по умолчанию для DES
,DES-EDE
и Blowfish
шифры.Это означает, что в случае поставщика SunJCE
:
Cipher c1 = Cipher.getInstance("DES/ECB/PKCS5Padding");
и
Cipher c1 = Cipher.getInstance("DES");
являются эквивалентными утверждениями.
Используя такие режимы, как CFB и OFB, блочные шифры могут шифровать данные в единицах, меньших, чем фактический размер блока шифра.При запросе такого режима вы можете при желании указать количество битов, обрабатываемых за один раз, добавив этот номер к имени режима, как показано в « DES / CFB8 / NoPadding » и «».DES / OFB32 / PKCS5Padding"преобразования.Если такой номер не указан, используется значение по умолчанию для конкретного поставщика.(Например, провайдер SunJCE
использует значение по умолчанию 64 бит для DES.) Таким образом, блочные шифры могут быть преобразованы в байтовые ориентированные потоковые шифры с использованием 8-битного режима, такого как CFB8 или OFB8.
Приложение A этого документа содержит список стандартных имен, которые можно использовать для указания имени алгоритма, режима и компонентов схемы заполнения преобразования.
объекты, возвращаемые фабричными методами, неинициализированы и должны быть инициализированы, прежде чем они станут пригодными для использования.
Поскольку в вашем коде не указан режим или заполнение, используются значения по умолчанию для конкретного поставщика.Похоже, что ваш провайдер SunJCE
и его заполнение по умолчанию, вероятно, "NoPadding"
.С этим заполнением вы несете ответственность за то, чтобы размер зашифрованного массива байтов был кратным количеству байтов в секретном ключе.Вы можете упростить свою жизнь, указав режим и отступы в своем преобразовании: