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()
,以了解其如何处理尺寸过小的输入将很有帮助。我想它会向上舍入,但可以验证一下。