此代码给出了无效的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 CTR时效果很好,但现在使用CBC或GCM时,我可以使用的最大密钥长度是32位?? 处理加密的代码: 运行此加密时会引发< code >异常: 请注意,使用Wiki中提供的示例时会发生同样的事情.zip(并将密钥长度更改为256或128) 知道为什么抛出吗?
问题内容: 我正在研究 文本加密和解密 项目(遵循Struts 2) 每当我输入密码和纯文本时,都会收到“无效的AES密钥长度”错误。 服务等级 这是错误 问题答案: 一般须知: 键!=密码 需要键,而不是密码。见下文 这可能是由于策略限制导致无法使用32个字节的密钥。看到其他答案 就你而言 问题是数字1:您要传递密码而不是密钥。 AES仅支持16、24或32字节的密钥大小。您要么需要提供准确的金
问题内容: 我正在使用3DESC解密数据,但出现以下异常 我的代码: 打印上面使用的所有字节数组 问题答案: DES- EDE密码可与3个不同的子密钥一起使用,因此密钥大小应为24字节(3乘8字节)。如果您只想使用2个键(即在此模式下,第一个键==最后一个键),则只需复制键数组的前8个字节。
我正在学习ssl通信的基础知识,尤其是AES加密。我读了OpenSSL代码,看到了一个名为< code>userkey的指针。 在文件"aes_core. c"中 > 从何而来?它是如何生成的? 我想知道不同版本AES的的实际大小。 256 位版本为 256 / 8 = 32,192 为 24,128 为 16?我有点迷茫。 如果长度是可变的,那么我应该如何为那些符合长度要求的输入创建一个安全的输
我被要求为安全类实现AES算法。在实现过程中,我找不到答案,我如何从用户那里接受像密码这样的任意长度的密钥,并将其转换为128、192或256位密钥。我该怎么办?
我使用mysql aes加密和解密如下: 我读到AES支持128 192和256。我假设默认值是128是正确的吗?因此,鉴于上述查询没有定义密钥长度,它会以默认密钥长度加密和解密吗? 如果是这样,在上面的查询中指定密钥长度会更好吗?因为例如:假设我使用默认值128加密和存储数据,但后来设置更改,256变为默认值,那么这意味着它将无法解密数据,对吗?有没有办法在上面的查询中定义密钥长度? 另外,我用