【问题标题】:Blowfish ECB encryption in C# implementationC# 实现中的 Blowfish ECB 加密
【发布时间】:2017-04-14 01:23:16
【问题描述】:

我有一个客户需要我们使用 Blowfish ECB 加密和 cipherMode 0,输出 1。我试图解决这个问题,但我卡住了。如何修复我的代码?

以下是完整的客户说明:

算法: 河豚 ・模式: ECB ・衬垫: PKCS5Padding *我们使用ECB模式,不需要初始向量。

示例 ・加密密钥: 2fs5uhnjcnpxcpg9 → 纯文本: 3280:99:20120201123050 → 密文: daa745f1901364c0bd42b9658db3db96336758cd34b2a576 * 请保留 16 位十六进制字符的密文。 * 请生成没有“salt”的密文。

我需要用 C# 编写这个。这是我所做的,但它似乎不起作用:

string member_id = "3280";
        string panelType = "99";
        string RandomString = "20120201123050";
        string encryptionKey = "2fs5uhnjcnpxcpg9";
        string cryptstr = member_id + ":" + panelType + ":" + RandomString;
        string plainText = cryptstr;
        BlowFish b = new BlowFish(encryptionKey);
        string cipherText = b.Encrypt_ECB("3280:99:20120201123050");

结果不是 daa745f1901364c0bd42b9658db3db96336758cd34b2a576。我哪里做错了?

【问题讨论】:

  • 哇,这是最糟糕的安全性!即使是 Blowfish 的作者也不再使用它,现在他使用 AES。不要使用 ECB 模式,它不安全,请参阅ECB mode,向下滚动到 Penguin。
  • 你要导入什么来获得 Blowfish 类?而且由于我没有看到您为填充设置任何内容,包含该 Blowfish 类的库的文档说它正在使用的默认值是什么?
  • 终于到了更新安全的时候了,AES 已经有 15 年了,客户真的应该努力,再等 15 年太可笑了。

标签: c# encryption blowfish


【解决方案1】:

Encrypt_ECB() 所以我假设它是 Schneier 的课程。

ctor 需要一个十六进制字符串,如果一个被传递,你需要一个字节数组的重载:

BlowFish b = new BlowFish(Encoding.UTF8.GetBytes(encryptionKey));

输出仍然不正确,让我们通过解密他们的示例来看看它到底应该是什么:

string clear = b.Decrypt_ECB("daa745f1901364c0bd42b9658db3db96336758cd34b2a576");

给我们:

"3280:99:20120201123050\u0002\u0002"

这很好,但最后有 2 个 0x2 字节,N x 0xN 是由于 PKCS 填充。要获得匹配,您需要填充输入:

// input to bytes
List<byte> clearBytes = new List<byte>(Encoding.UTF8.GetBytes("3280:99:20120201123050"));

// how many padding bytes?
int needPaddingBytes = 8 - (clearBytes.Count % 8);

// add them
clearBytes.AddRange(Enumerable.Repeat((byte)needPaddingBytes, needPaddingBytes));

// encrypt
byte[] cipherText = b.Encrypt_ECB(clearBytes.ToArray());

// to hex
string cipherTextHex = BitConverter.ToString(cipherText).Replace("-", "").ToLowerInvariant();

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-01-28
  • 2010-10-26
  • 2023-03-25
  • 1970-01-01
  • 2010-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多