C ++河豚支持对少于8个字母的块进行加密,而.NET不支持。为什么?

-->C# NET Blowfish<--
-->C++ Blowfish<--

在C ++和C#应用程序中,我都加密以下数组

    byte response[6] =
    {
        0x00, 0x80, 0x01, 0x61, 0x05, 0x06
    };


在C ++和C#应用程序中,我使用相同的参数调用Encrypt函数。

C++
Blowfish.Encrypt((LPBYTE)responce + 2,(LPBYTE)responce + 2, 4);

C#
Blowfish.Encrypt(responce, 2, responce, 2, responce.Length - 2);


但是,在C ++中,我将数据加密,但在C#中未加密。

C# NET Blowfish中的第45,47和49行是有问题的行,在第45行的计算之后-结果变为0。第47行变为2 + 0 = 2并且第49 2行不少于2,因此没有循环。

C ++河豚中有一些填充,但是当我尝试理解它时会迷路。

我的问题是,在C#中,填充必须与C ++中的填充完全相同,因此我得到了有效的答案。我不能使用随机填充,然后在解密后删除无用的字节,因为发送加密数组的服务器是不是我的。

您能指出我在C ++河豚中使用什么填充以及如何在C#NET中实现它。

///注意,我不必多次发送此数据包,只需发送一次。

提前致谢!

最佳答案

您粘贴的代码(不建议用于SO,因为如果一段时间内没有人阅读您的粘贴,粘贴将被删除,从而使该问题失效)在其标题注释中说:

/// Note that the number of bytes must be adjusted to the block size of the algorithm.


(第3和第4行)。因此,如果它忽略了数据量过少的数据,这似乎在规范上。

注释说,C ++代码似乎用空字节填充。

// pad end of data with null bytes to complete encryption


查看C ++函数GetOutputLength(),以了解其如何处理尺寸过小的输入将很有帮助。我想它会向上舍入,但可以验证一下。

10-08 14:49