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# 河豚不能的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 phpmyadmin 中的河豚秘密错误

在php中解密河豚

如何用河豚散列长密码(> 72个字符)

phpMyAdmin 中的河豚秘密是啥?

bcrypt,河豚的密码最大长度

数据的 DES、三重 DES、AES、河豚加密的比较