У меня есть строка, представляющая симметричный ключ, полученный с помощью Hashicorp Vault (на самом деле это может быть не важно). Мне нужен этот ключ для шифрования больших файлов, поэтому я не могу отправить файл напрямую в Vault с просьбой зашифровать данные. Вместо этого я хочу сделать это локально, поэтому попросил Vault создать для меня симметричный ключ (с помощью конечной точкиtransit/datakey/plaintext/). Теперь у меня есть симметричный ключ (и его зашифрованный текст) длиной 44 байта, сгенерированный с помощью алгоритма aes256_gcm96. Итак, насколько я понял, мой 32-байтовый ключ заключен в 96-битный (12-байтовый) блок gcm.
Теперь я хочу использовать этот ключ для шифрования моих данных, но ключ слишком длинный для этого. , поэтому мне нужно как-то его либо развернуть, либо вызвать какую-то функцию, которая принимает на вход такой ключ. Я пытался использовать Cipher для шифрования своих данных. Это то, что я (ошибочно) сделал до сих пор
Код: Выделить всё
byte[] datakeyByteArray = mySymmetricKey.getBytes();
SecretKey secretKey = new SecretKeySpec(datakeyByteArray, "AES_256");
Cipher cipher = Cipher.getInstance("AES_256/GCM/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);`
При вызове функции init, очевидно, выдается исключение: java.security.InvalidKeyException: Ключ должен быть длиной 32 байта
Какого рода Могу ли я выполнить операцию, чтобы получить действительный ключ?
Спасибо.
Подробнее здесь:
https://stackoverflow.com/questions/647 ... oming-from