Итак, мне дали задание доказать, что можно расшифровать строку, представленную в шестнадцатеричных байтах, которая была зашифрована с помощью Blowfish с помощью C#.
Вот что есть:
- Зашифрованная строка, представленная в шестнадцатеричных байтах.
- Ключ шифрования в виде строки.
Возможно, я немного наивен, но я думал, что этот процесс будет простым.
то есть возьмите реализацию 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));
}
}
Я попытался адаптировать это из класса Test, который поставляется с BouncyCastle. Может ли кто-нибудь указать мне хороший пример, который делает то, что я хочу сделать?
Я думаю, что по крайней мере одна из проблем, с которыми я сталкиваюсь, связана с ключом - он не похож на шестнадцатеричный формат, но я не знаю, что с ним делать.
ОБНОВИТЬ:
Я также попробовал другую библиотеку из здесь, потому что она выглядит ближе к тому, что я хочу делать.
i.e.
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 крайне затрудняет его правильное использование теми, кто имеет ограниченный опыт/понимание шифрования. Однако мы, вероятно, захотим, чтобы это произошло в будущем, поэтому мне все еще интересно, может ли кто-нибудь указать мне правильное направление.