2014-11-21 3 views
0

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

Согласно SecretKeySpec документации,

public byte[] getEncoded() 

Возвращает ключевой материал этого секрета ключ.

Какой именно ключевой материал? , Потому что если я пытаюсь напечатать любую клавишу, как это,

System.out.print(secretKey.getEncoded()) 

Я получаю странный результат, как,

s[[email protected] 

, но когда я печатаю его, используя любую схему кодирования, как Base64, Base16, я получаю фактический ключ.

Может ли кто-нибудь объяснить, какой именно материал на самом деле?

ответ

2

SecretKeySpec используется для симметричных алгоритмов. Эти алгоритмы имеют только один ключ, который является битовой строкой. В Java он представлен как массив байтов (byte[]). Кодировки асимметричных ключей алгоритма: different.

byte[] keyBytes = /* set the key somehow */; 
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES"); 
Arrays.equals(keyBytes, keySpec.getEncoded()); // true 

Что касается «странного» вывода, массивы не могут быть напечатаны на Java, поэтому печатается только эта ссылка. Если вы даже хотели специально напечатать byte[], это также не сработало бы, потому что в целом текст должен использовать только символы, которые можно распечатать. Вот почему его кодирование как Base64 позволяет печатать ключ, но также раздувает ключ.

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

Смежные вопросы