Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Počínaje rozhraním .NET 10 jsou všechny konstruktory na System.Security.Cryptography.Rfc2898DeriveBytes zastaralé. Volání těchto konstruktorů v kódu generuje upozornění SYSLIB0060 v době kompilace.
Důvod zastaralosti
Implementace PBKDF2 založená na instancích, kterou poskytuje System.Security.Cryptography.Rfc2898DeriveBytes, nabízí nestandardní využití tím, že "streamuje" bajty zpět a umožňuje postupná volání GetBytes. Nejedná se o zamýšlené použití PBKDF2; algoritmus by se měl použít jako jednorázová akce. Jednorázová funkce existuje jako statická metoda Rfc2898DeriveBytes.Pbkdf2 a měla by se použít místo instancování System.Security.Cryptography.Rfc2898DeriveBytes.
Alternativní řešení
Změňte instance System.Security.Cryptography.Rfc2898DeriveBytes a volání GetBytes tak, aby místo toho používaly Rfc2898DeriveBytes.Pbkdf2 statickou metodu pro jednorázové použití.
Změňte například tento kód:
Rfc2898DeriveBytes kdf = new Rfc2898DeriveBytes(password, salt, iterations, hashAlgorithm);
byte[] derivedKey = kdf.GetBytes(64);
Na toto:
byte[] derivedKey = Rfc2898DeriveBytes.Pbkdf2(password, salt, iterations, hashAlgorithm, 64);
Pokud jste použili Rfc2898DeriveBytes konstruktor, který přijímá velikost soli, budete muset ručně vytvořit sůl (Rfc2898DeriveBytes.Pbkdf2 nemá přetížení, které přijímá velikost soli).
Pro konzistenci s předchozí implementací použijte RandomNumberGenerator.Fill k vyplnění existujícího pole kryptograficky zabezpečenými bajty nebo RandomNumberGenerator.GetBytes k vytvoření nového pole s kryptograficky zabezpečenými bajty.
Změňte například tento kód:
Rfc2898DeriveBytes kdf = new Rfc2898DeriveBytes(password, saltSize, iterations, hashAlgorithm);
byte[] salt = kdf.Salt;
byte[] derivedKey = kdf.GetBytes(64);
Na toto:
byte[] salt = RandomNumberGenerator.GetBytes(saltSize);
byte[] derivedKey = Rfc2898DeriveBytes.Pbkdf2(password, salt, iterations, hashAlgorithm, 64);
Potlačení upozornění
Pokud musíte použít zastaralé rozhraní API, můžete potlačit upozornění v kódu nebo v souboru projektu.
Chcete-li potlačit pouze jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, které chcete zakázat a znovu povolit upozornění.
// Disable the warning.
#pragma warning disable SYSLIB0060
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0060
Pokud chcete potlačit všechna upozornění SYSLIB0060 v projektu, přidejte do souboru projektu vlastnost <NoWarn>.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0060</NoWarn>
</PropertyGroup>
</Project>
Další informace naleznete v tématu Potlačení upozornění.