首页 > 解决方案 > AES-128 可以有一个 15 长 ASCII 字符的密钥吗?

问题描述

我正在尝试解密一个加密的 h264 I 帧,我得到了一个长度为 15 的密钥,这是否有效?

它的长度不应该是 16,所以二进制表示应该是 128 位?

标签: encryptioncryptographyaes

解决方案


如果您有可以在键盘上键入的内容,那么无论长度如何,这都不是正确的 AES 密钥。AES 的强大之处在于其密钥实际上是随机的。您可以在键盘上键入的任何内容都不是等效长度的有效随机序列。您可以在拉丁风格的键盘上轻松输入大约 96 个字符。一个字节有 256 个值。96^16 是 256^16 的一小部分。

要将人类可以键入的“密码”转换为有效的随机 AES 密钥,您需要一个基于密码的密钥派生函数 (PBKDF)。最著名和最广泛使用的是PBKDF2。还有其他优秀的 PBKDF,包括scryptArgon2。所有这些都需要随机盐,并且所有(在密码学术语中)计算速度都非常慢。

也就是说,关于您的框架,无法猜测他们如何将此字符串转换为密钥。您必须查阅文档或实施。将字符串转换为键的方法有无数种(其中大多数都很糟糕,但仍有无限的选择可供选择)。正如 Michael Fehr 指出的那样,他们可能做了一些不安全的事情,比如用零填充。他们可能还使用了像 SHA-256 这样的简单散列函数,或者使用 256 位密钥,或者采用顶部或底部 128 位。或者……几乎是其他任何东西。这里没有常见的做法。每个加密系统都必须记录它是如何实现的。

(请注意,即使您看到“AES-128”,这也是模棱两可的。它可以表示“带有 128 位密钥的 AES”,也可以表示“带有 128 位块和 128、192 或256 位。”虽然前者的含义更常见,但后者经常出现,例如在 Apple 文档中,尽管是多余的(AES 总是有一个 128 位块)。所以即使是“密钥有多长”这样的问题需要深入研究文档或实现。不幸的是,密码学非常不标准化。)


推荐阅读