SYSLIB0041: некоторые конструкторы Rfc2898DeriveBytes устарели
Rfc2898DeriveBytes Следующие конструкторы устарели, начиная с .NET 7. При их использовании во время компиляции создается предупреждение SYSLIB0041
.
- Rfc2898DeriveBytes(String, Byte[])
- Rfc2898DeriveBytes(String, Int32)
- Rfc2898DeriveBytes(Byte[], Byte[], Int32)
- Rfc2898DeriveBytes(String, Byte[], Int32)
- Rfc2898DeriveBytes(String, Int32, Int32)
Эти перегрузки по умолчанию используют хэш-алгоритм или количество итераций, а значения по умолчанию больше не считаются безопасными. Это все конструкторы, доступные в .NET 4.7.1 и более ранних версиях. Идти вперед, следует использовать только более новые конструкторы.
Обходное решение
Используйте другую перегрузку конструктора, где можно явно указать число итерации (значение по умолчанию равно 1000) и хэш-алгоритму (значение по умолчанию — значение HashAlgorithmName.SHA1по умолчанию).
Если вы используете число итерации по умолчанию или алгоритм хэширования по умолчанию, попробуйте перейти к более безопасным значениям, то есть большее число итерации или более новый хэш-алгоритм.
Отключение предупреждений
Если необходимо использовать устаревшие API, вы можете отключить предупреждение в коде или в файле проекта.
Чтобы отключить только одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить предупреждение.
// Disable the warning.
#pragma warning disable SYSLIB0041
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0041
Чтобы отключить все SYSLIB0041
предупреждения в проекте, добавьте <NoWarn>
свойство в файл проекта.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0041</NoWarn>
</PropertyGroup>
</Project>
Дополнительные сведения см. в разделе Отключение предупреждений.