Получение оригинального секретного ключа из шестнадцатеричного формата - PullRequest
3 голосов
/ 26 ноября 2009

Это шестнадцатеричный формат секретного ключа, используемого для шифрования AES

00010203050607080A0B0C0D0F101112

Могу ли я сгенерировать оригинальный формат SecretKey или байтовый массив из этого?

Если да, то как?

Ответы [ 3 ]

2 голосов
/ 28 ноября 2009

Вы можете использовать кодек Apache Commons для выполнения шестнадцатеричного декодирования,

http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Hex.html#decodeHex(char[])

Если вы не хотите использовать какие-либо библиотеки, вы также можете сделать это,

byte[] bytes = new BigInteger("7F" + str, 16).toByteArray();
SecretKeySpec key = new SecretKeySpec(bytes, 1, bytes.length-1, "AES");

Вы должны добавить дополнительный байт 0x7F, чтобы BigInteger не удалял начальные нули или не подписывал байты.

0 голосов
/ 26 ноября 2009

Какой оригинальный формат SecretKey?
Вам известно, что byte[] содержит подписанные байты со значением от -128 до 127? Было бы больно, если бы вы попробовали это:

byte[] key = {
  0x00,0x01,0x02,0x03,0x05,0x06,0x07,0x08,
  0x0A,0x0B,0x0C,0x0D,0x0F,0x10,0x11,0x12
};

Примечание. Если у вас есть такие значения, как 0x80 - 0xFF, вам необходимо привести их к типу (байт) 0x80 - (байт) 0xFF, чтобы избежать предупреждения о диапазоне.

0 голосов
/ 26 ноября 2009

A SecretKey - это интерфейс. Какого типа была реализация? J2SE имеет два реализующих класса, KerberosKey и SecretKeySpec, оба из которых имеют конструкторы с байтовым массивом в качестве параметра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...