如何更改 AES 128 的密钥数量 [重复]

Posted

技术标签:

【中文标题】如何更改 AES 128 的密钥数量 [重复]【英文标题】:how to change numbers of secret key for AES 128 [duplicate] 【发布时间】:2014-07-15 04:18:14 【问题描述】:

我找到了 android 加密的来源..它使用 AES 128 位加密..但是密钥的数量固定为 16 个字符..谁能告诉我如何根据我们的意愿更改数字密钥..我不'不想限制密钥的字符..

这是链接

https://sites.google.com/site/mobilesecuritylabware/3-data-location-privacy/lab-activity/cryptography/cryptography-mobile-labs/encryption-decryption/2-lab-activity/lab-activity

【问题讨论】:

好的起点是Java 256-bit AES Password-Based Encryption,其中有一些示例如何从任意长度的文本密码中获取正确的 AES 密钥。 【参考方案1】:

大多数对称加密算法使用固定长度的块和固定长度的密钥进行操作。对于 AES,它是具有 128 位、192 位或 256 位密钥的 16 字节块。您不能有不同的密钥长度。

现在,理想情况下,密钥必须是 128 位,而不仅仅是“16 个字符”(如果您指的是文本符号)。 ASCII 字母表中的 16 个字符比 128 个“有意义”位要少得多。因此,要在加密密钥中有 128 个全权位,您需要使用更长的密码(对于 128 位密钥,至少 22 个 ASCII 字符),然后应用其中之一key derivation functions (BCrypt, PBKDF) 输入您的密码以获取所需长度的密钥。

接下来要考虑的是,您现在正在研究低级加密,您需要处理密码模式、填充等。如果您不熟悉密码学,那么查看更高级别的加密标准是有意义的,这些标准对您隐藏了低级别的复杂性。例如,OpenPGP 在使用密码加密数据方面做得非常好。

【讨论】:

【参考方案2】:

之所以称为 128 位加密,是因为密钥是 128 位。 1 个字符是 8 位,因此是 16 个字符。如果您想要另一个长度密钥,则不能使用 AES 128 位加密。

【讨论】:

16 个字符与 128 个随机位不同 什么意思?在 OP 提供的链接之后,它甚至说“这是因为我们使用的 AES 加密算法是 128 位分组密码,它必须使用 128 位、192 位或 256 位密钥。在这里我们设置为简单起见,它只接受一个 16 字符(128 位)的密钥,我们使用“1111111111111111”作为演示密钥。” @OlegEstekhin 此处的字符或字节只是在这种情况下的术语问题,没有理由反对。

以上是关于如何更改 AES 128 的密钥数量 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

AES加密算法256位密钥与128位密钥的不同是啥?

如何安全地为 AES CBC 加密生成 IV?

text 唯一支持的密码是AES-128-CBC和AES-256-CBC,密钥长度正确。

JavaScript SubtleCrypto 生成 176 位 AES 密钥而不是 128 位?

如何使用java对密码加密 加密方式aes

AES算法简介