Как проверить правильность ключа при расшифровке (алгоритм AES)? - C#
Формулировка задачи:
Hi!
Есть реализация шифровки и расшифровки файлов. Когда значение ключа при расшифровки файла не совпадает с ключом которым он был зашифрован, то выдается исключение "Заполнение неверно и не может быть удалено"
Как грамотно можно проверить правильность ключа?
По гуглу нашел совет использовать HMAC, но так и не понял зачем он и как с помощью него можно это реализовать.
Буду признателен за помощь.
Решение задачи: «Как проверить правильность ключа при расшифровке (алгоритм AES)?»
textual
Листинг программы
public string Decrypt(byte[] encryptedText, byte[] key, byte[] iv)
{
if (encryptedText == null || encryptedText.Length <= 0)
throw new ArgumentNullException("encryptedText");
if (key == null || key.Length <= 0)
throw new ArgumentNullException("key");
if (iv == null || iv.Length <= 0)
throw new ArgumentNullException("iv");
using (var aesAlg = new AesCryptoServiceProvider())
{
aesAlg.Key = key;
aesAlg.IV = iv;
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
MemoryStream msDecrypt = null;
try
{
msDecrypt = new MemoryStream(encryptedText);
using (var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
using (var srDecrypt = new StreamReader(csDecrypt))
{
return srDecrypt.ReadToEnd();
}
}
catch (Exception ex)
{
throw new CryptographicException(string.Format("Неверный пароль при расшифровке {0}", "filename"), ex);
}
finally
{
if (msDecrypt != null)
msDecrypt.Dispose();
}
}