基本上,我试图将用户指定的字符串散列到一个 256 位字节数组中,以在使用 Java 的 AES256 实现加密数据时用作密钥。我不断收到此运行时异常:
java.security.InvalidKeyException: Illegal key size or default parameters
我怀疑这是因为某些字节不是 8 位长,所以整体密钥大小不是 256 位。我想知道如何在左边用 0 填充它们,所以确保密钥的长度?
编辑:
这是从值到消息摘要的转换:
MessageDigest hasher = MessageDigest.getInstance("SHA-256");
// Use the factory method to get the SHA-256 instance of a MessageDigest object.
hasher.update(input.getBytes());
// Update the message digest object with the bytes of the value to hash.
return hasher.digest();
// Hash the value and return the string representation.
这是加密,使用“hasher”的输出。
SecretKeySpec key = new SecretKeySpec(keyBytes, "AES");
cryptoTool.init(Cipher.ENCRYPT_MODE, key); // This is where the error fires.
return String.valueOf(cryptoTool.doFinal(plaintext.getBytes()));