【发布时间】:2014-09-09 09:56:12
【问题描述】:
因此,我得到了一项任务,以证明可以解密以十六进制字节表示的字符串,该字符串已使用 C# 使用 Blowfish 加密。
这里有什么:
- 以十六进制字节表示的加密字符串。
- 字符串形式的加密密钥。
现在也许我有点天真,但我认为这个过程会很简单。
即从网上抓取一个 Blowfish 实现,然后简单地插入加密密钥和加密文本,它就会以可读格式输出字符串。
不幸的是,情况似乎并非如此。在过去的几个小时里,我尝试了几个不同的库,但最终选择了 BouncyCastle,因为它似乎是最受欢迎的。但是没有太多文档(在此处和其他网站的其他问题中注明),我真的不知道如何完成这项工作。
这是我所拥有的:
using Org.BouncyCastle.Crypto.Engines;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Utilities.Encoders;
using Org.BouncyCastle.Crypto;
public class CryptTest
{
public void Decrypt()
{
var engine = new BlowfishEngine();
var param = new KeyParameter(System.Text.Encoding.ASCII.GetBytes("sdjerwioukjiefdjewiujewiunjeuwer"));
var input = Hex.Decode("db247cceae61fddbcbb62d00281e0446");
BufferedBlockCipher cipher = new BufferedBlockCipher(engine);
cipher.Init(false, param);
byte[] outBytes = new byte[input.Length];
int len1 = cipher.ProcessBytes(input, 0, input.Length, outBytes, 0);
cipher.DoFinal(outBytes, len1);
Console.WriteLine(System.Text.Encoding.ASCII.GetString(outBytes));
}
}
我试图从 BouncyCastle 附带的 Test 类中调整它。谁能指出我想做的一个好例子的方向?
我认为我遇到的至少一个问题是密钥 - 它看起来不像是十六进制格式,但我不知道如何处理它。
更新:
我还尝试了与 here 不同的库,因为它看起来更接近我想要做的。
即
BlowFish b = new BlowFish(System.Text.Encoding.ASCII.GetBytes("sdjerwioukjiefdjewiujewiunjeuwer"));
var result1 = b.Decrypt_CBC("db247cceae61fddbcbb62d00281e0446");
var result2 = b.Decrypt_ECB("db247cceae61fddbcbb62d00281e0446");
Console.WriteLine(result1 + "\n" + result2);
但我仍然收到乱码。
更新 2:
暂时选择了一些更简单的东西。 Bouncy Castle(显然)缺乏文档,这使得那些对加密经验/理解有限的人很难正确使用它。但是,我们可能希望在未来实现这一目标,所以如果有人能指出正确的方向,我仍然很感兴趣。
【问题讨论】:
-
你有什么问题?
-
基本上它不是在解密字符串,我不知道从哪里开始找出原因。
-
那么会发生什么?会爆炸吗?
-
不,它只是输出一些不可读的东西。
-
那么你的加密和解密不匹配。检查你的静脉注射。
标签: c# bouncycastle blowfish