Мне нужно расшифровать изображение, поступающее из онлайн-сервиса (это не мой сервис, поэтому я должен использовать этот способ шифрования).
Это изображение зашифровано с помощью AES/ECB с одним синхронным ключом и дополнено с помощью PKCS5.
Я пробовал несколько способов добиться этого, но ни один из них не работал. Я использую криптографическую библиотеку BoucyCastle.
Вот мой код расшифровки:
public static byte[] Decrypt(string input)
{
var cipher = CipherUtilities.GetCipher("AES/ECB/PKCS5Padding");
cipher.Init(false, new KeyParameter(Encoding.UTF8.GetBytes(KEY)));
byte[] todo = Encoding.UTF8.GetBytes(Pad(input));
byte[] bytes = cipher.ProcessBytes(todo);
byte[] final = cipher.DoFinal();
// Write the decrypt bytes & final to memory...
var decryptedStream = new MemoryStream(bytes.Length);
decryptedStream.Write(bytes, 0, bytes.Length);
decryptedStream.Write(final, 0, final.Length);
decryptedStream.Flush();
var decryptedData = new byte[decryptedStream.Length];
decryptedStream.Read(decryptedData, 0, (int)decryptedStream.Length);
return decryptedData;
}
private static string Pad(string data)
{
int len = data.Length;
int toAdd = (16 - len % 16);
for (int i = 0; i < toAdd; i++)
{
data += (char)toAdd;
}
return data;
}
Когда я пытаюсь это сделать, возникает выражение InvalidCipherTextExpression с сообщением "Повреждён блок заполнения" в строке byte[] final = cipher.DoFinal();
.
Я протестировал свою функцию заполнения, и она, похоже, работает должным образом.
Я попытался заглянуть внутрь исходного кода BouncyCastle. чтобы найти мою ошибку, и я обнаружил, что в последнем блоке нет заполнения, и это вызывает ошибку. Поэтому мне интересно, не делаю ли я что-то не так где-то еще, потому что это может быть не из заполнения.
Возможно, входная строка, которая извлекается с http-сервера с помощью этого:
// grab te response and print it out to the console along with the status code
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
return new StreamReader(response.GetResponseStream()).ReadToEnd();
Я хочу добиться того же, что и здесь: C# Расшифровка AES /ECB дополнен с использованием PKCS#5
Но авансеров нет, так как спрашивающий ничего не пробовал..
Заранее спасибо, и мне очень жаль мой плохой английский.