计算任何数据的RC5加密大小就像将明文长度相加到最接近的8的倍数一样简单。我想知道的是,这是否可以在另一个方向上完成,以获得给定密文的原始明文数据的长度。很明显,在解密发生之前,这些信息是不会被泄露的,但是在解密过程中是否可以跟踪/计算这些信息呢?
我正在处理RC-5解密的这实现(反编译C++二进制文件,在C#中重新实现),它以4字节分组解密数据,并将结果复制到输出缓冲区中。问题是,在解密数据结束后,输出缓冲区中有大量垃圾,因此很难确定数据的实际结束位置。如果明文是以空结尾的字符串,这很容易,但我正在寻找一种更通用的解决方案,可以处理任意二进制数据。
发布于 2022-03-03 16:16:40
我想知道的是,这是否可以在另一个方向上完成,得到给定密文的原始明文数据的长度。
RC5是块密码;您要问的是块密码模式(以及实现所使用的填充);没有足够的信息来回答您的具体问题;不过,我有一个猜测。
“分组密码”是从n位位字符串(在本例中是n=64)到n位位字符串的可逆转换。“块密码模式”所做的是,“块密码”并使用它的一种方式,使一个更普遍有用的操作,例如,加密一个任意长度的明文。
现在,看看代码,代码似乎使用“欧洲央行模式”加密字符串(这通常是一个糟糕的选择--当然,这不是你的问题)。使用"ECB模式“,模式本身只能处理长度为块长度的倍数(在本例中为16字节)的明文。因为我们通常想要处理任意长度的明文,所以我们所做的就是添加“填充”,即在末尾添加一些额外的东西,使长度乘以16个字节(然后模式可以处理这个长度)。
这种填充设计是为了使在解密时移除填充变得容易--但是有几种可能性,并且您给出的解密代码不能告诉我们使用的是哪一种。在最常见的模式中,最后一个字节用来表示添加的填充字节的数量--您可能想看看示例中的情况是否如此。
https://crypto.stackexchange.com/questions/98940
复制相似问题