首页 > 解决方案 > AES 加密数据的长度

问题描述

我有一个数据需要加密存储在数据库中,加密前数据的最大长度为 50 个字符(英语或阿拉伯语),我需要使用 AES-128 位加密数据,并将输出存储在数据库(base64string)。

如何知道加密后的数据长度?

标签: asp.netvb.netaes

解决方案


尝试使用您指定的算法、块大小、IV 大小,然后查看您得到的输出大小:-)

首先,它取决于输入文本的编码。是UTF8吗?UTF16?让我们假设 UTF8,因此每个字符 1 个字节意味着 50 个字节的输入数据到您的加密算法。(如果是 UTF16,则为 100 字节)

然后,您将填充算法的块大小。AES,无论密钥大小如何,都是一个 16 字节的块。所以我们将被填充到 64 字节(或 112 用于 UTF 16)

然后我们需要存储IV和头信息。这就是(通常,使用默认设置/IV 大小)另外 16 字节,所以我们是 80 字节(或 128 用于 UTF16)

最后我们编码为 Base64。我假设您想要字符串长度,否则将其制成字符串是浪费的。所以 Base 64 使用以下公式使字符串膨胀:Ceil(bytes/3) * 4。所以对我们来说,就是 Ceil(80/3) = 27 * 4 = 108 个字符(或者 172 用于 UTF 16)

同样,这完全取决于您对加密方式、文本编码方式等的选择。

在依靠这些数字获得任何有用的信息之前,我会先尝试一下您的方案。


推荐阅读