AES算法输入和输出限制

时间:2010-12-23 16:03:53

标签: aes

我想在我的应用程序中使用AES加密。我遇到过aes算法的一些开源实现。通过查看它们,我对以下参数感到困惑:

  1. AES密钥长度。提到密钥长度应为128,192或256字节。如果我的密钥只是五位数,即23467

  2. ,该怎么办?
  3. AES明文长度:对于明文长度是否有任何限制?

  4. AES输出:如果我的密钥长度为5位,而纯文本为10个字符,则aes输出字符串的最小大小是什么。

  5. 任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:9)

  

AES密钥长度。提到密钥长度应为128,192或256位。如果我的密钥只是五位数,即23467

,该怎么办?

您似乎正在考虑将密钥作为各种密码。事实并非如此。加密密钥并不意味着要记住。它是一长串随机生成的字节,应存储在安全的地方。

但是,您可以从密码派生加密密钥,例如使用哈希函数。在这种情况下,您输入234567并使用生成的摘要作为关键字。但是,这会带来一些安全隐患,因为它会使您的密钥易受字典和彩虹表攻击。查找“基于密码的加密”,了解如何安全地处理此问题;特别是,请查看PBKDF2中描述的RFC2898

  

AES明文长度:对aes明文长度有任何限制吗?

AES是块密码,是加密系统的基础构建块。它本身只能加密单个数据块(16个字节),因此密码学家创建了几种“操作模式”,使我们能够加密任意长度的明文。 CTR是一个很好的操作模式示例,不需要任何填充,可以并行化。

  

AES输出:如果我的密钥长度为5位,而纯文本为10个字符,则aes输出字符串的最小大小是什么。

这完全取决于操作模式。在您的情况下,它可能是10(当不需要填充时,例如CTR}或16(对于基于块的模式,如CBC)。

答案 1 :(得分:2)

  1. 我认为你的意思是128和256.(不是198。)

  2. 这不是关键。那是密码。您使用像PBKDF1(google it)这样的算法从密码中导出密钥。

  3. 没有。 AES是分组密码。它适用于与键大小相同的输入块。您可以根据需要使用尽可能多的块,将输入切换为(例如)128位块。确保使用CBC或类似模式进行AES。

  4. 您的密钥是128或256位。您的输入为80位(10 * 8),填充为128或256.您的输出长度与密钥大小相同。

  5. 尝试找到一个为您完成大部分工作的加密库。您不想只使用基本的AES功能。您还需要处理IV,AES模式,可能还有MAC等。我不能推荐任何东西,因为您没有说出您尝试使用的语言。