gpt4 book ai didi

c# - C++ blowfish 使用较少的字母,但 C# blowfish 不

转载 作者:行者123 更新时间:2023-11-28 04:00:50 24 4
gpt4 key购买 nike

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 中实现吗?

//注意我不需要多次发送这个数据包,只发送一次。

提前致谢!

最佳答案

你粘贴的代码(顺便说一下,不推荐用于 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() 会很有帮助,了解它如何处理过小的输入。我猜它向上舍入,但最好能验证一下。

关于c# - C++ blowfish 使用较少的字母,但 C# blowfish 不,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/704402/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com