无效的AES密钥长度错误
此代码给出了无效的AES密钥长度错误。我该如何纠正?(我想要128位密钥AES加密)
package org.temp2.cod1;import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.*;
import java.io.*;
public class Code1 {
public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
String s = "9882623867";
byte[] plaintext = s.getBytes("UTF-16");
String s2 = "supernova";
byte[] key = s2.getBytes("UTF-16");
Cipher c = Cipher.getInstance("AES");
SecretKeySpec k = new SecretKeySpec(key, "AES");
c.init(Cipher.ENCRYPT_MODE, k);
byte[] encryptedData = c.doFinal(plaintext);
System.out.println(encryptedData);
}
}
任何帮助表示赞赏
回答:
使用a
SecretKeyFactory
从密码派生密钥字节。您可以在此处查看详细示例。请注意,您需要指定128位密钥的密钥长度,而不是该示例中所示的256位。
您将遇到的下一个问题是您没有指定填充方案。除非您的消息是16字节(AES块大小)的倍数,否则将引发错误。如示例所示,使用PKCS5Padding。
在密码上使用CBC模式将需要为每个消息选择一个新的初始化向量。该唯一的IV必须与加密的消息一起发送给收件人。
尝试不充分了解此处提出的概念(甚至更多)而执行加密操作,可能会导致系统不安全。
以上是 无效的AES密钥长度错误 的全部内容, 来源链接: utcz.com/qa/404307.html