基本上,我正在尝试将用户指定的字符串散列为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()));
答案 0 :(得分:-1)
我猜可能字符串不是32个字符?或者你有一个可能包含非ASCII字符的字符串?
以下函数将获取一个字符串并从中生成一个32字节的数组。
String to32Bytes(String s) {
return Arrays.copyOf(s.getBytes(), 32);
}
请注意,这不是一种很好的加密方式,因为字符串哈希算法通常会提供更安全的密钥。