当前位置: 首页 > 面试题库 >

无效的AES密钥长度错误

端木骞尧
2023-03-14
问题内容

此代码给出了无效的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变为默认值,那么这意味着它将无法解密数据,对吗?有没有办法在上面的查询中定义密钥长度? 另外,我用