Тестируя RSA для шифрования ключа AES я понял, что RSA имеет только 1 блок с ограниченным размером (устанавливаемый программистом), действительно хранят зашифрованный ключ. Вопрос, когда я использую:
KeyGenerator.getInstance("AES").generateKey()
ключи AES будут иметь постоянный размер в каждом компьютере и jvm реализации?
В KeyGenerator есть метод инициализации, который позволяет вам указать количество бит.
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128);
SecretKey key = keyGenerator.generateKey();
Будет ли это делать то, что вам нужно?
По умолчанию кажется 128-битным, но я бы не предполагал, что все JVM используют одно и то же значение по умолчанию или что оно всегда будет по умолчанию.
Документация Suns Java Cryptography Extension утверждает, что для ключей AES поддерживаются несколько размеров ключей, и не предоставляет никакой информации о размере по умолчанию.
Максимальный размер ключей также может варьироваться в зависимости от юрисдикционных файлов, используемых различными версиями Suns JVM.
Генератор ключей
имеет несколько методов init ()
; вы должны позвонить одному из них перед генерацией ключа.В Javadoc для KeyGenerator
указано, что если вы не вызываете один из методов init ()
, то «каждый провайдер должен предоставить (и задокументировать) инициализацию по умолчанию».
Так что это зависит от поставщика. Поскольку вы инициализируете генератор ключей с именем алгоритма «AES», можно предположить, что вы получите ключ с размером, подходящим для AES, то есть 128, 192 или 256 бит (16, 24 и 32 байта соответственно). Но какой из них вы получите, зависит от фактического поставщика, который может зависеть от JVM и, возможно, ее конфигурации.