当前位置: 首页 > 知识库问答 >
问题:

AES中任意长度密钥到标准密钥长度

陆畅
2023-03-14

我被要求为安全类实现AES算法。在实现过程中,我找不到答案,我如何从用户那里接受像密码这样的任意长度的密钥,并将其转换为128、192或256位密钥。我该怎么办?

共有1个答案

齐建白
2023-03-14

如注释中所述,这通常是通过密钥派生函数 (KDF) 完成的。使用两种主要类型的密钥派生函数

第一种是当您已经拥有某种类型的密码材料时使用的,通常是密钥交换的某种变体(通常是Diffie Hellman)。在这种情况下,假设密钥材料是强的,您只需要提取它并从中生成潜在的多个密钥。TLS 1.3中使用的HKDF和TLS 1.2 PRF就是很好的例子。它们通常是HMAC的包装,而且速度非常快。

第二种是在你有密码的时候使用的。因为,一般来说,人们不擅长想出和记住足够熵的密码,所以我们使用专门迭代的KDF,以使速度变慢,例如较旧的PBKDF2或较新的scrypt和Argon2。这些选项被设计为使用独特的盐,并被迭代多次,以便选择错误密码的用户至少得到一定程度的保护,防止泄露,较新的选项被设计为内存昂贵,以防止对GPU的有效攻击。

 类似资料:
  • 我正在学习ssl通信的基础知识,尤其是AES加密。我读了OpenSSL代码,看到了一个名为< code>userkey的指针。 在文件"aes_core. c"中 > 从何而来?它是如何生成的? 我想知道不同版本AES的的实际大小。 256 位版本为 256 / 8 = 32,192 为 24,128 为 16?我有点迷茫。 如果长度是可变的,那么我应该如何为那些符合长度要求的输入创建一个安全的输

  • 问题内容: 此代码给出了无效的AES密钥长度错误。我该如何纠正?(我想要128位密钥AES加密) 任何帮助表示赞赏 问题答案: 使用a 从密码派生密钥字节。您可以在此处查看详细示例。请注意,您需要指定128位密钥的密钥长度,而不是该示例中所示的256位。 您将遇到的下一个问题是您没有指定填充方案。除非您的消息是16字节(AES块大小)的倍数,否则将引发错误。如示例所示,使用PKCS5Padding

  • 我使用mysql aes加密和解密如下: 我读到AES支持128 192和256。我假设默认值是128是正确的吗?因此,鉴于上述查询没有定义密钥长度,它会以默认密钥长度加密和解密吗? 如果是这样,在上面的查询中指定密钥长度会更好吗?因为例如:假设我使用默认值128加密和存储数据,但后来设置更改,256变为默认值,那么这意味着它将无法解密数据,对吗?有没有办法在上面的查询中定义密钥长度? 另外,我用

  • 我正在尝试使用加密技术加密文本。上次使用AES CTR时效果很好,但现在使用CBC或GCM时,我可以使用的最大密钥长度是32位?? 处理加密的代码: 运行此加密时会引发< code >异常: 请注意,使用Wiki中提供的示例时会发生同样的事情.zip(并将密钥长度更改为256或128) 知道为什么抛出吗?

  • 问题内容: 我正在研究 文本加密和解密 项目(遵循Struts 2) 每当我输入密码和纯文本时,都会收到“无效的AES密钥长度”错误。 服务等级 这是错误 问题答案: 一般须知: 键!=密码 需要键,而不是密码。见下文 这可能是由于策略限制导致无法使用32个字节的密钥。看到其他答案 就你而言 问题是数字1:您要传递密码而不是密钥。 AES仅支持16、24或32字节的密钥大小。您要么需要提供准确的金

  • 问题内容: 我无法在上创建索引。 MySQL: 问题答案: