我想在我的应用程序中使用AES加密。我遇到过aes算法的一些开源实现。通过查看它们,我对以下参数感到困惑:
AES密钥长度。提到密钥长度应为128,192或256字节。如果我的密钥只是五位数,即23467
AES明文长度:对于明文长度是否有任何限制?
AES输出:如果我的密钥长度为5位,而纯文本为10个字符,则aes输出字符串的最小大小是什么。
任何人都可以帮助我吗?
答案 0 :(得分:9)
AES密钥长度。提到密钥长度应为128,192或256位。如果我的密钥只是五位数,即23467
,该怎么办?
您似乎正在考虑将密钥作为各种密码。事实并非如此。加密密钥并不意味着要记住。它是一长串随机生成的字节,应存储在安全的地方。
但是,您可以从密码派生加密密钥,例如使用哈希函数。在这种情况下,您输入234567
并使用生成的摘要作为关键字。但是,这会带来一些安全隐患,因为它会使您的密钥易受字典和彩虹表攻击。查找“基于密码的加密”,了解如何安全地处理此问题;特别是,请查看PBKDF2中描述的RFC2898。
AES明文长度:对aes明文长度有任何限制吗?
AES是块密码,是加密系统的基础构建块。它本身只能加密单个数据块(16个字节),因此密码学家创建了几种“操作模式”,使我们能够加密任意长度的明文。 CTR是一个很好的操作模式示例,不需要任何填充,可以并行化。
AES输出:如果我的密钥长度为5位,而纯文本为10个字符,则aes输出字符串的最小大小是什么。
答案 1 :(得分:2)
我认为你的意思是128和256.(不是198。)
这不是关键。那是密码。您使用像PBKDF1(google it)这样的算法从密码中导出密钥。
没有。 AES是分组密码。它适用于与键大小相同的输入块。您可以根据需要使用尽可能多的块,将输入切换为(例如)128位块。确保使用CBC或类似模式进行AES。
您的密钥是128或256位。您的输入为80位(10 * 8),填充为128或256.您的输出长度与密钥大小相同。
尝试找到一个为您完成大部分工作的加密库。您不想只使用基本的AES功能。您还需要处理IV,AES模式,可能还有MAC等。我不能推荐任何东西,因为您没有说出您尝试使用的语言。