很明显,算法如何管理纯文本作为状态矩阵的字符字节值。
但是二进制文件的AES加密呢?
如果状态标准化为4x4字节,算法如何管理大于16字节的文件?
答案 0 :(得分:2)
AES原语是允许加密/解密任意二进制流的结构的基础。
AES-128采用128位密钥和128位数据块,并对此块进行“加密”或“解密”。 128位是16个字节。这16个字节可以是文本(例如ASCII,每字节一个字符)或二进制数据。
一个简单的实现只会将长度超过16个字节的文件分成16个字节的组,并用相同的密钥加密每个文件。您可能还需要“填充”文件以使其成为16字节的倍数。问题在于它暴露了有关该文件的信息,因为每次使用相同的密钥加密同一个块时,您将获得相同的密文。
有许多方法可以构建AES函数来安全地加密/解密超过16个字节。例如,您可以使用CBC或使用counter mode。
计数器模式更容易解释,所以让我们来看看。如果我们使用密钥k AES_e(k, b)
加密块b,我们不希望重复使用相同的密钥多次加密同一个块。所以我们将使用的结构是这样的:
计算AES_e(k, 0)
,AES_e(k, 1)
,AES_e(k, n)
现在我们可以接受任意输入,将其分成16个字节的块,并使用此序列进行XOR。由于攻击者不知道他们的密钥,他们无法重新生成此序列并解码我们的(更长)消息。在上面生成的块和明文之间逐位应用XOR。接收方现在可以生成相同的序列,使用密文对其进行异或,并检索明文。
在应用程序中,您还希望将其与某种身份验证机制相结合,以便您使用AES-GCM或AES-CCM。
答案 1 :(得分:1)
想象一下,你有一个17字节的纯文本。 状态矩阵将填充前16个字节,一个块将被加密。 下一个块将是剩下的1个字节,状态矩阵将用数据填充,以填充AES需要的16个字节。
它适用于字节/二进制文件,因为AES总是考虑字节统一。无论是ascii块还是其他任何想法都无关紧要。请记住,计算机中的所有内容都是二进制/字节/位。一旦数据成为流数据(以字节为单位的信息块),它就可以正常工作。