Часто при работе с шифрованием AES на Java возникает задача использования собственного ключа вместо автоматически сгенерированного. Например, при разработке системы безопасности может понадобиться использовать конкретный ключ, который будет использоваться для шифрования и дешифрования данных.
Однако, при попытке использовать собственный ключ длиной 256 бит, можно столкнуться с проблемой, когда система выдает ошибку о том, что ключ слишком длинный. Это происходит из-за того, что Java по умолчанию поддерживает ключи длиной не более 128 бит.
Ниже представлен пример кода, который позволяет реализовать 256-битное шифрование AES с использованием собственного ключа.
import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import java.security.MessageDigest; import java.util.Arrays; public class Main { public static void main(String[] args) throws Exception { String keyStr = "myPassword"; // ваш ключ byte[] key = (keyStr).getBytes("UTF-8"); MessageDigest sha = MessageDigest.getInstance("SHA-1"); key = sha.digest(key); key = Arrays.copyOf(key, 16); // используем только первые 128 бит SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES"); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec); byte[] encrypted = cipher.doFinal(("Text to encrypt").getBytes()); System.out.println(new String(encrypted)); } }
В данном примере используется алгоритм SHA-1 для генерации 160-битного ключа из введенного пароля. Затем из полученного ключа берется только первые 128 бит, чтобы соответствовать требованиям Java по длине ключа. Далее этот ключ используется для шифрования текста.
Это решение позволяет использовать собственный ключ для шифрования AES, удовлетворяя при этом требованиям Java к длине ключа.
Добавить комментарий