-1

基本上,我试图将用户指定的字符串散列到一个 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()));
4

1 回答 1

-1

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

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

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

请注意,这不是进行加密的好方法,因为字符串散列算法通常会提供更安全的密钥。

于 2013-02-14T22:47:31.873 回答