非法密钥大小或默认参数

时间:2013-02-14 22:40:39

标签: java encryption

基本上,我正在尝试将用户指定的字符串散列为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()));

1 个答案:

答案 0 :(得分:-1)

我猜可能字符串不是32个字符?或者你有一个可能包含非ASCII字符的字符串?

以下函数将获取一个字符串并从中生成一个32字节的数组。

String to32Bytes(String s) {
   return Arrays.copyOf(s.getBytes(), 32);
}

请注意,这不是一种很好的加密方式,因为字符串哈希算法通常会提供更安全的密钥。