【问题标题】:Botan/C++ - Encrypting with AES using a key size larger than 32 bytesBotan/C++ - 使用大于 32 字节的密钥使用 AES 加密
【发布时间】:2021-01-27 22:45:50
【问题描述】:

我需要使用 AES-256 进行加密,但我还需要一个大于 32 字节的密钥。我有一个函数,它接受文本、密钥和 IV,并返回加密的文本。它适用于小于 32 字节的所有内容,但任何更大的内容都会给我一个错误。

所以本质上,我怎样才能实现使用大于 32 字节的键的方法?我已经尝试将密钥拆分为 32 字节(或更少)字符串的向量,然后将它们用作密钥,但我无法找到一种方法来一次使用所有这些密钥统一加密文本,那我该怎么办?

【问题讨论】:

  • 顾名思义,AES-256 使用 256 位或 32 字节的密钥。为什么你认为你需要更大的密钥大小?似乎是 X-Y 问题。
  • 我需要一个更大的键,因为这需要用户输入。
  • 用户输入的值(如密码)往往是低熵的,这表明使用基于密码的密钥派生函数(如 argon2)进行不同的处理。
  • 为什么需要超过 32 个字节的密钥?是有问题的文本长度吗?这个问题在技术上是错误的。
  • 我使用密钥输入作为密钥,例如密码。我可能只是去 sha256 输入

标签: c++ encryption aes botan


【解决方案1】:

对于 AES-256,密钥大小始终为 32 字节长 (256/8 = 32)。

当输入密钥不完全是 32 字节和/或质量较差时,使用 key derivation function。对于足够熵的键,一个简单的散列函数(例如 SHA-256)就足够了。

换句话说,只需通过 SHA-256 输入您的输入密钥,就会得到一个可用于 AES-256 的 32 字节密钥。

【讨论】:

  • 所以我只需要 sha256 输入键,并将其用作键?
猜你喜欢
  • 1970-01-01
  • 2017-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多