C++ blowfish 支持加密少于 < 8 个字母的 block ,而 .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++ blowfish 中有一些 padding,但当我试图理解它时,我迷路了。
我的问题是,在C#中,填充必须和C++中的完全一样,所以我得到了一个有效的答案。我不能使用随机填充,然后在解密后删除无用的字节,因为服务器我发送的加密数组不是我的。
你能告诉我 C++ blowfish 中使用了什么填充以及它应该如何在 C# NET 中实现吗?
//注意我不需要多次发送这个数据包,只发送一次。
Cảm ơn trước!
你粘贴的代码(顺便说一下,不推荐用于 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()
会很有帮助,了解它如何处理过小的输入。我猜它向上舍入,但最好能验证一下。
Tôi là một lập trình viên xuất sắc, rất giỏi!