C++ 河豚可以使用更少的字母,但 C# 河豚不能
Posted
技术标签:
【中文标题】C++ 河豚可以使用更少的字母,但 C# 河豚不能【英文标题】:C++ blowfish works with fewer letters,but C# blowfish doesn't 【发布时间】:2009-04-01 07:26:31 【问题描述】:C++ 河豚支持加密少于
-->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 中应该如何实现它。
//注意我不需要多次发送这个数据包,只需一次。
提前致谢!
【问题讨论】:
***.com/questions/692810/… - 也许这可以给你一个线索 【参考方案1】:您粘贴的代码(顺便说一下,不推荐用于 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()
,了解它如何处理尺寸过小的输入会很有帮助。我猜它向上取整,但最好验证一下。
【讨论】:
@unwind,谢谢你的帮助!这个功能可以在这里看到->> pastebin.com/m71b97dc6当我得到一个有效的答案时,我会编辑我的问题,所以将来它会继续存在。跨度>以上是关于C++ 河豚可以使用更少的字母,但 C# 河豚不能的主要内容,如果未能解决你的问题,请参考以下文章