当前位置: 首页 > 面试题库 >

AES / CBC和AES / ECB加密后的数据大小

姚子石
2023-03-14
问题内容

我想知道AES加密后的数据大小,这样我就可以避免主要出于了解大小而缓存我的后AES数据(在磁盘或内存上)。

我使用128位AES javax.crypto.Cipherjavax.crypto.CipherInputStream进行加密。

使用各种输入大小执行的一些测试表明,如下计算的后期加密大小是正确的:

long size = input_Size_In_Bytes; 
long post_AES_Size = size + (16 - (size % 16));

但是我不确定以上公式是否适用于所有可能的输入大小。

在应用AES加密后,是否有一种方法可以计算数据的大小-事先无需缓存(磁盘或内存中的)加密数据即可知道其加密后的大小?


问题答案:

AES与密钥大小无关地具有16字节的固定块大小。假设您使用PKCS 5/7填充,请使用以下公式,

 cipherLen = (clearLen/16 + 1) * 16;

请注意,如果明文是块大小的倍数,则需要一个全新的块进行填充。假设您的明文为16个字节。密文将占用32个字节。

您可能需要使用密文存储IV(初始向量)。在这种情况下,您需要为IV增加16个字节。



 类似资料:
  • 我希望有一个用C编写的程序,可以在没有openssl这样的大型库的帮助下,用AES-CBC对字符串进行编码/解码。 目标: 使用密码短语对字符串进行编码/解码: 因此,应用程序需要接受3个输入参数。。。 输入字符串(待编码)/或已编码字符串(待解码) 用于编码/解码字符串的密码 编码或解码指示器 我对C语言不熟悉(我可以用C#编码)。 我已经找到了https://github.com/kokke/

  • 我只想用这3种模式测试openSSL中的AES:128192和256密钥长度,但我解密的文本与我的输入不同,我不知道为什么。此外,当我传递一个巨大的输入长度(比如1024字节)时,我的程序显示。。。我的意见总是一样的,但这并不重要,至少现在是这样。代码如下: 编辑: 当我将输出大小更改为而不是时,我得到了结果: 那么,是否有可能存在Outpus大小和IV大小的问题?它们应该有什么尺寸(AES-CB

  • 我只需要通过代码加密AES CBC 128位模式的字符串。我使用openssl库完成了这项工作,但无法获得正确的输出。 到目前为止,我已经完成了。 我的十六进制输出是:B0 15 751B50 80 D4 FF 81 68 146BB71B95 99 37 38 但正确的输出是:< code > 73 5C 04 F9 57 18 43 7C EE 68 27 59 2B 41 A8 DA (通过

  • 我用Delphi加密“sifrelenecek”字符串,使用AES 128 ECB,使用密钥为“KRPTTT101103”,它给了我“FBE4A4405D6C1B54503D9B213E41AE56”,我正在检查http://aes.online-domain-tools.com/,它是正确的。我试图使用此功能创建相同的PHP加密; 但是php给我的结果是“wL2yf 72thixicjw0duQ

  • 这是提供的文件:- 加密算法 为了在传输和发布数据时减轻参数调整/修改,商家可以使用Telenor PoC提供的散列密钥加密请求。该加密请求与主请求一起发送,然后在OPS端对主请求进行协调,以检测参数是否更改。加密可以使用以下算法完成: Put(“StoreID”,“28”); Fields.Put(“OrderRefNum”,“11001”); Fields.Put(“ExpiryDate”,“

  • 我在Erlang中加密AES 256位CBC然后用c代码解密它时遇到了一个问题。而加密/解密在Erlang和C中有效,但不能从一个到另一个。 和 c 代码 我得到的错误是 当我在Erlang中解密时,它可以正常工作,当我在C中加密时,它也可以使用相同的Key和IV。它是否是密码模式不匹配。虽然在我看来是正确的。任何指针都会非常有用。谢谢。 我算出,同样的数据我用C加密和解密,然后进行十六进制转储。