Не проверенное возвращаемое значение вызывает непредвиденные состояния и условия

Я искал в Интернете более часа и могу найти только обсуждения на стороне клиента, мои последние результаты сканирования. Я получаю метод, который использует метод Read(), и потому что Read() игнорирует возвращенное значение, может привести к тому, что программа пропустит неожиданные состояния и обнаружение условий. Если кто-то может объяснить, в мелких деталях, и возможность рекомендовать исправить это было бы здорово. Функция ниже:

Оскорбительная строка кода в методе:

csEncrypt.Read(fromEncrypt, 0, fromEncrypt.Length);

Метод вызова:

    public String DecryptMessage(byte[] encrypted)
    {
        ASCIIEncoding textConverter = new ASCIIEncoding();
        decryptor = aes.CreateDecryptor(key, IV);
        MemoryStream msDecrypt = new MemoryStream(encrypted);
        csEncrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read);
        byte[] fromEncrypt = new byte[encrypted.Length];
        csEncrypt.Read(fromEncrypt, 0, fromEncrypt.Length);
        return textConverter.GetString(fromEncrypt);
    }

1 ответ

Попробуйте не игнорировать возвращаемое значение:

public String DecryptMessage(byte[] encrypted)
{
    ASCIIEncoding textConverter = new ASCIIEncoding();
    decryptor = aes.CreateDecryptor(key, IV);
    using (MemoryStream msDecrypt = new MemoryStream(encrypted))
    {
        using (var csEncrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
        {
            byte[] fromEncrypt = new byte[encrypted.Length];
            var bytesRead = csEncrypt.Read(fromEncrypt, 0, fromEncrypt.Length);
            return textConverter.GetString(fromEncrypt, 0, bytesRead);
        }
    }
}

Что произойдет в вашем коде, если будет возвращено меньше байтов, чем вы ожидали?

Другие вопросы по тегам