问题标签 [blowfish]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
4632 浏览

c# - 使用 Blowfish NET 的 C# 问题:如何从 Uint32[] 转换为 byte[]

在 C# 中,我使用 Blowfish.NET 2.1.3 的 BlowfishECB.cs 文件(可以在这里找到

在 C++ 中,它是未知的,但它是相似的。

在 C++ 中,Initialize(blowfish) 过程如下:

在 C# 中,Initialize(blowfish) 过程是相同的

这就是问题:

这就是在 C++ 中初始化密钥的方式

如您所见,键是一个由两个 DWORD 组成的数组,总共 8 个字节。

在 C# 我这样声明它,但我得到一个错误

错误是:

参数 '1':无法从 'uint[]' 转换为 'byte[]'

我究竟做错了什么?

提前致谢!

0 投票
1 回答
9319 浏览

c# - C# 中的河豚

我的 C++ 程序使用标准的河豚。

我的 C# 程序从这里使用 Blowfish 加密算法。

两个应用程序(TCP 客户端)都做同样的事情:接收数据包,对其进行加密,然后将其发回。如果服务器将数据包识别为正常 - 它会发送另一个数据包,否则它会关闭套接字。我遵循了 C++ 和 C# 中的所有函数,除了加密之外,一切都是一样的。

在 C++ 文件中,我只有一种加密。但是,在 C# Blowfish 我有

  • 河豚
  • 河豚CFB
  • 河豚欧洲央行
  • 河豚简单

我不知道我的 C++ 项目中是哪一个,所以我随机选择了BlowfishECB. 但它不起作用,服务器(我无权访问它)无法将数据包识别为加密。

我的问题:C# 是否有标准的 Blowfish,或者如果这是唯一的,我该如何解决这个问题? 编辑:

C++ 河豚代码可以在这里看到

0 投票
1 回答
1166 浏览

c# - 如何在 C++ 中使用河豚作为 C# 中的外部 dll

似乎 C# 中没有和这个一样的河豚。所以我决定将它用作外部,如果它不能再次工作,那么在 C# 中翻译整个河豚。但首先我会尝试用作外部。

您能否看一下C++ 河豚并告诉我是否必须更改函数参数(其中一些是 LPBYTE,不包含在 C# 中)。

另外,如果您告诉我如何将它们用作外部 dll(我已经将其编译为 dll),我将不胜感激,但是 C++ 中的函数参数让我感到沮丧。

编辑: 我只需要调用 Initialize、Encode 和 Decode。

提前致谢!

0 投票
3 回答
713 浏览

c# - C#:Blowfish 不能使用更少的字母

我正在使用 Blowfish.NET 最新版本,但有一个问题。

我用正确的方式称呼它,我希望它从第三个字节开始读/写,长度为 6 - 2,因为我不使用两个字节。

问题:

如果我传递更长的数据,河豚工作正常,但我需要加密这个。我们找到了问题,但我的问题是:如何解决它?!

0 投票
1 回答
996 浏览

c# - C++ 河豚可以使用更少的字母,但 C# 河豚不能

C++ 河豚支持加密少于 8 个字母的块,而 .NET 不支持。为什么?

-->C# NET Blowfish<-- -->C++ Blowfish<--

在 C++ 和 C# 应用程序中,我加密了以下数组

在 C++ 和 C# 应用程序中,我使用相同的参数调用 Encrypt 函数。

但是,在 C++ 中,我得到了加密的数据,但不是在 C# 中。

C# NET Blowfish中的第 45,47 和 49行是有问题的行,在第 45 行计算后 - 结果变为 0。第 47 行变为 2 + 0 = 2 并且第 49 行 2 不小于 2,因此没有循环。

C ++河豚中有一些填充,但是当我尝试理解它时我迷路了。

我的问题是,在 C# 中,填充必须与 C++ 中的完全相同,所以我得到了一个有效的答案。我不能使用随机填充然后在解密后删除无用的字节,因为我发送加密数组的服务器是不是我的。

您能否指出 C++ 河豚中使用了哪些填充以及如何在 C# NET 中实现它。

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

提前致谢!

0 投票
1 回答
1677 浏览

c# - C#:Blowfish 加密单个 dword

我正在将 C++ TCP 客户端转换为 C#。客户端用于使用河豚对数组的 4 个字节进行编码。

C++ 河豚

C# 河豚(C# NET)

C++

C#

在 C++ 代码中,当使用这些参数调用“Blowfish.Encode”行时,它会进入 cBlowfish.Encrypt 函数

为了清楚起见,由于传递的字节长度很短(4),循环只执行了一次。

从这个巨大的代码中只执行一个调用(只执行一次),调用是:

//意思是代码传递前两个if语句,然后离开循环和函数。

从我的角度来看,解决方案隐藏在加密函数内部的某个地方:

定义:

问题是 C++ 中的 Blowfish_Encipher 函数有两个参数:Input(xl) as dword 和 Output(xr) as dword。

C# Blowfish Encrypt_Block 函数有四个参数,为什么?

与 C++ 河豚不同,EncryptBlock 调用 Encrypt 而不是 Encrypt 来调用 EncryptBlock。也许 EncryptBlock 不是 C++ Blowfish_Encipher?

无论如何,我的问题是,当我用 6 个字节的数组调用 C++ 代码时,请求河豚只编码最后 4 个字节,它做到了。

如果我用这 4 个字节在 C# 中调用 encrypt 函数,它返回 0x00。(如果您想查看 C# Blowfish,请查看我的第一行 - 我已在此处添加了一个超链接)。

注意我不能改变数据包的结构,它应该是这样的,但是加密的。

我也试过这个:

知道C++ Encrpypt函数只执行一个调用-blowfish Encipher。我尝试在C#中直接调用EncryptBlock,但是输入和输出有Hi Uint32和Low Uint32,如何将它们传播为HI或LO?如果 Encrypt_Block 在 C# 中调用河豚加密,这会起作用吗?我不太确定。

先感谢您!

0 投票
4 回答
2048 浏览

c - Adaptation problem with the Blowfish Encryption in C

I'm writing a program that implements the Boneh-Franklin Identity Based Encryption. For the actual encryption methods, I use Blowfish which I got from (https://voltar.org/). I'm trying to adapt the blowfish encryption/decryption code to my program. The difference in my program is that I read the message from the standard input, encrypt it and print the encryption, then decrypt it and print the decryption (which should be the original message). Currently, I read the input message up to a "?" character and then try to follow the code from the site. However, the decryption is printed as unreadable characters. I tried to solve this problem but I got stuck. Can you please help me?

************ This is my code to read the input message: ***************

************ Then I used the code (cited and referenced) for encryption ***************

Of course I modified it as message read from stdin not program args

************ Then I used the code (cited and referenced) for decryption ***************

Here, I excluded the part where it tokenized the cipher and created the plain char array for decryption, I simply passed the cipher array to be decrypted (as it is output from the encryption function), and stored in the plain char array with length = strlen(cipher)

Any help is appreciated. Sorry for the inconvenience and many thanks in advance.

0 投票
2 回答
2574 浏览

ruby - 如何在 Ruby 中将 Blowfish 编码的二进制字符串转换为 ASCII?

我想使用 Ruby 和Crypt library对一些纯文本进行编码。然后,我想将此加密文本(连同其他一些数据)作为 ASCII 十六进制字符串传输到 XML 文件中。

我有以下代码片段:

哪个输出:

我相信我需要调用enc.unpack(),但我不确定 unpack 方法调用需要哪些参数。

0 投票
1 回答
3267 浏览

java - 在 AS3Crypto 和 Javax.Crypto 之间加密/解密 ECB/PKS5/Blowfish 失败并出现填充错误

我有一个作为文件发送给我的密钥,因此我可以使用 Blowfish 加密一些 xml 数据。如何访问密钥以便可以将其与 AS3Crypto 一起使用?我假设我需要使用 [Embed] 元标记嵌入它。它是 mimeType="application/octet-stream" 但我不确定这是否正确。如何嵌入,然后将此文件作为密钥引用?我正在加密的 xml 无法在 Java 端解密。每次尝试都失败,但出现以下异常:

javax.crypto.BadPaddingException:给定最终块未正确填充。

作为奖励,如果有人有使用 lib 来处理 Java 实现的经验并且知道使用的理想模式/填充/IV,那将是很棒的。谢谢!

0 投票
1 回答
574 浏览

blowfish - 将 TurboPower Blowfish 移植到 .Net

我有一个应用程序,它最初是用 Borland C++ 编写的,并使用了在 TurboPower LockBox 组件中实现的 Blowfish 算法。

此应用程序现已移植到 C#。目前我调用了一个使用该算法的 Borland C++ dll。但是,在 64 位操作系统上运行应用程序时,每当尝试使用此 dll 时都会出错。如果我将应用程序编译为 32 位,一切正常,但我们希望让此应用程序作为 64 位应用程序工作。据我所知,这意味着我需要一个像 C++ 一样工作的 .Net Blowfish 算法。

我找到了 Blowfish.Net,它看起来很有希望。但是,当我使用相同的密钥和文本时,加密的结果不匹配。我确实发现 C++ dll 使用 BlowfishECB 算法。它还将结果转换为 Base 64,我也这样做了。

对此的任何帮助将不胜感激。这是 C# 中的一些测试代码。