Я пытаюсь расшифровать с помощью этой функции, но я не уверен, что является причиной его неисправностьAesCryptoServiceProvider расшифровать
public string Decrypt(byte[] cipherText, byte[] IV, byte[] key)
{
using (AesCryptoServiceProvider AESDecrypt = new AesCryptoServiceProvider())
{
//here we set the key and IV instead having the class generate them.
AESDecrypt.IV = IV;
AESDecrypt.Key = key;
ICryptoTransform decryptor = AESDecrypt.CreateDecryptor(AESDecrypt.Key,
AESDecrypt.IV);
using (MemoryStream msDecrypt = new MemoryStream(cipherText))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt,
decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
csDecrypt.Flush();
plainText = srDecrypt.ReadToEnd();
return plainText;
}
}
}
}
}
возвращает открытый текст, пустую строку. Ключ и IV являются системой, сгенерированной в предыдущей функции и передаются правильно.
Когда вы открываете свой 'StreamReader', это msDecrypt/cipherText длины, которые вы ожидаете от них? Я делаю это только с потоками, а не с byte [], но попробовали ли вы проверить положение потока msDecrypt (когда вы открываете считыватель потоков?). Он должен находиться в позиции 0. – ne1410s
Вы помываете метод шифрования? Проверьте длину зашифрованного текста в начале вашего метода и выбросьте исключение, если оно равно нулю. Используя код шифрования, который вы использовали в предыдущем потоке, если вы не реализовали Flush() правильно, у вас может быть массив байтов с нулевой длиной. –
Удалите флеш, посмотрите, работает ли он. Если у вас всего 16 байтов зашифрованного текста, может быть, что сам открытый текст состоит из 0 байтов (или, если вы просто распечатываете его, из непечатаемых символов). В этом случае у вас есть только блок из 16 заполняющих байтов. –