Rfc2898DeriveBytes Konstruktory

Definice

Inicializuje novou instanci Rfc2898DeriveBytes třídy.

Přetížení

Name Description
Rfc2898DeriveBytes(String, Byte[])
Zastaralé.
Zastaralé.

Inicializuje novou instanci Rfc2898DeriveBytes třídy pomocí hesla a soli k odvození klíče.

Rfc2898DeriveBytes(String, Int32)
Zastaralé.
Zastaralé.

Inicializuje novou instanci Rfc2898DeriveBytes třídy pomocí hesla a velikosti soli k odvození klíče.

Rfc2898DeriveBytes(Byte[], Byte[], Int32)
Zastaralé.
Zastaralé.

Inicializuje novou instanci Rfc2898DeriveBytes třídy pomocí hesla, soli a počtu iterací pro odvození klíče.

Rfc2898DeriveBytes(String, Byte[], Int32)
Zastaralé.
Zastaralé.

Inicializuje novou instanci Rfc2898DeriveBytes třídy pomocí hesla, soli a počtu iterací pro odvození klíče.

Rfc2898DeriveBytes(String, Int32, Int32)
Zastaralé.
Zastaralé.

Inicializuje novou instanci Rfc2898DeriveBytes třídy pomocí hesla, velikosti soli a počtu iterací pro odvození klíče.

Rfc2898DeriveBytes(Byte[], Byte[], Int32, HashAlgorithmName)
Zastaralé.

Inicializuje novou instanci Rfc2898DeriveBytes třídy pomocí zadaného hesla, soli, počtu iterací a názvu hash algoritmu k odvození klíče.

Rfc2898DeriveBytes(String, Byte[], Int32, HashAlgorithmName)
Zastaralé.

Inicializuje novou instanci Rfc2898DeriveBytes třídy pomocí zadaného hesla, soli, počtu iterací a názvu hash algoritmu k odvození klíče.

Rfc2898DeriveBytes(String, Int32, Int32, HashAlgorithmName)
Zastaralé.

Inicializuje novou instanci třídy pomocí zadaného Rfc2898DeriveBytes hesla, velikosti soli, počtu iterací a názvu algoritmu hash k odvození klíče.

Rfc2898DeriveBytes(String, Byte[])

Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs

Upozornění

The constructors on Rfc2898DeriveBytes are obsolete. Use the static Pbkdf2 method instead.

Upozornění

The default hash algorithm and iteration counts in Rfc2898DeriveBytes constructors are outdated and insecure. Use a constructor that accepts the hash algorithm and the number of iterations.

Inicializuje novou instanci Rfc2898DeriveBytes třídy pomocí hesla a soli k odvození klíče.

public:
 Rfc2898DeriveBytes(System::String ^ password, cli::array <System::Byte> ^ salt);
[System.Obsolete("The constructors on Rfc2898DeriveBytes are obsolete. Use the static Pbkdf2 method instead.", DiagnosticId="SYSLIB0060", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public Rfc2898DeriveBytes(string password, byte[] salt);
public Rfc2898DeriveBytes(string password, byte[] salt);
[System.Obsolete("The default hash algorithm and iteration counts in Rfc2898DeriveBytes constructors are outdated and insecure. Use a constructor that accepts the hash algorithm and the number of iterations.", DiagnosticId="SYSLIB0041", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public Rfc2898DeriveBytes(string password, byte[] salt);
[<System.Obsolete("The constructors on Rfc2898DeriveBytes are obsolete. Use the static Pbkdf2 method instead.", DiagnosticId="SYSLIB0060", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
new System.Security.Cryptography.Rfc2898DeriveBytes : string * byte[] -> System.Security.Cryptography.Rfc2898DeriveBytes
new System.Security.Cryptography.Rfc2898DeriveBytes : string * byte[] -> System.Security.Cryptography.Rfc2898DeriveBytes
[<System.Obsolete("The default hash algorithm and iteration counts in Rfc2898DeriveBytes constructors are outdated and insecure. Use a constructor that accepts the hash algorithm and the number of iterations.", DiagnosticId="SYSLIB0041", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
new System.Security.Cryptography.Rfc2898DeriveBytes : string * byte[] -> System.Security.Cryptography.Rfc2898DeriveBytes
Public Sub New (password As String, salt As Byte())

Parametry

password
String

Heslo použité k odvození klíče.

salt
Byte[]

Klíčová sůl použitá k odvození klíče.

Atributy

Výjimky

Zadaná velikost soli je menší než 8 bajtů nebo počet iterací je menší než 1.

Heslo nebo sůl je null.

Příklady

Následující příklad kódu používá Rfc2898DeriveBytes třídu k vytvoření dvou identických klíčů pro Aes třídu. Potom pomocí klíčů zašifruje a dešifruje některá data.

using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;

public class rfc2898test
{
    // Generate a key k1 with password pwd1 and salt salt1.
    // Generate a key k2 with password pwd1 and salt salt1.
    // Encrypt data1 with key k1 using symmetric encryption, creating edata1.
    // Decrypt edata1 with key k2 using symmetric decryption, creating data2.
    // data2 should equal data1.

    private const string usageText = "Usage: RFC2898 <password>\nYou must specify the password for encryption.\n";
    public static void Main(string[] passwordargs)
    {
        //If no file name is specified, write usage text.
        if (passwordargs.Length == 0)
        {
            Console.WriteLine(usageText);
        }
        else
        {
            string pwd1 = passwordargs[0];
            // Create a byte array to hold the random value.
            byte[] salt1 = new byte[8];
            using (RandomNumberGenerator rng = RandomNumberGenerator.Create())
            {
                // Fill the array with a random value.
                rng.GetBytes(salt1);
            }

            //data1 can be a string or contents of a file.
            string data1 = "Some test data";
            //The legacy default iteration count is 1000 so the two methods use the same iteration count.
            int myIterations = 1000;
            try
            {
                Rfc2898DeriveBytes k1 = new Rfc2898DeriveBytes(pwd1, salt1,
myIterations);
                Rfc2898DeriveBytes k2 = new Rfc2898DeriveBytes(pwd1, salt1);
                // Encrypt the data.
                Aes encAlg = Aes.Create();
                encAlg.Key = k1.GetBytes(16);
                MemoryStream encryptionStream = new MemoryStream();
                CryptoStream encrypt = new CryptoStream(encryptionStream,
encAlg.CreateEncryptor(), CryptoStreamMode.Write);
                byte[] utfD1 = new System.Text.UTF8Encoding(false).GetBytes(
data1);

                encrypt.Write(utfD1, 0, utfD1.Length);
                encrypt.FlushFinalBlock();
                encrypt.Close();
                byte[] edata1 = encryptionStream.ToArray();
                k1.Reset();

                // Try to decrypt, thus showing it can be round-tripped.
                Aes decAlg = Aes.Create();
                decAlg.Key = k2.GetBytes(16);
                decAlg.IV = encAlg.IV;
                MemoryStream decryptionStreamBacking = new MemoryStream();
                CryptoStream decrypt = new CryptoStream(
decryptionStreamBacking, decAlg.CreateDecryptor(), CryptoStreamMode.Write);
                decrypt.Write(edata1, 0, edata1.Length);
                decrypt.Flush();
                decrypt.Close();
                k2.Reset();
                string data2 = new UTF8Encoding(false).GetString(
decryptionStreamBacking.ToArray());

                if (!data1.Equals(data2))
                {
                    Console.WriteLine("Error: The two values are not equal.");
                }
                else
                {
                    Console.WriteLine("The two values are equal.");
                    Console.WriteLine("k1 iterations: {0}", k1.IterationCount);
                    Console.WriteLine("k2 iterations: {0}", k2.IterationCount);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Error: {0}", e);
            }
        }
    }
}
Imports System.IO
Imports System.Text
Imports System.Security.Cryptography



Public Class rfc2898test
    ' Generate a key k1 with password pwd1 and salt salt1.
    ' Generate a key k2 with password pwd1 and salt salt1.
    ' Encrypt data1 with key k1 using symmetric encryption, creating edata1.
    ' Decrypt edata1 with key k2 using symmetric decryption, creating data2.
    ' data2 should equal data1.
    Private Const usageText As String = "Usage: RFC2898 <password>" + vbLf + "You must specify the password for encryption." + vbLf

    Public Shared Sub Main(ByVal passwordargs() As String)
        'If no file name is specified, write usage text.
        If passwordargs.Length = 0 Then
            Console.WriteLine(usageText)
        Else
            Dim pwd1 As String = passwordargs(0)

            Dim salt1(8) As Byte
            Using rng As RandomNumberGenerator = RandomNumberGenerator.Create()
                rng.GetBytes(salt1)
            End Using
            'data1 can be a string or contents of a file.
            Dim data1 As String = "Some test data"
            'The legacy default iteration count is 1000 so the two methods use the same iteration count.
            Dim myIterations As Integer = 1000
            Try
                Dim k1 As New Rfc2898DeriveBytes(pwd1, salt1, myIterations)
                Dim k2 As New Rfc2898DeriveBytes(pwd1, salt1)
                ' Encrypt the data.
                Dim encAlg As Aes = Aes.Create()
                encAlg.Key = k1.GetBytes(16)
                Dim encryptionStream As New MemoryStream()
                Dim encrypt As New CryptoStream(encryptionStream, encAlg.CreateEncryptor(), CryptoStreamMode.Write)
                Dim utfD1 As Byte() = New System.Text.UTF8Encoding(False).GetBytes(data1)
                encrypt.Write(utfD1, 0, utfD1.Length)
                encrypt.FlushFinalBlock()
                encrypt.Close()
                Dim edata1 As Byte() = encryptionStream.ToArray()
                k1.Reset()

                ' Try to decrypt, thus showing it can be round-tripped.
                Dim decAlg As Aes = Aes.Create()
                decAlg.Key = k2.GetBytes(16)
                decAlg.IV = encAlg.IV
                Dim decryptionStreamBacking As New MemoryStream()
                Dim decrypt As New CryptoStream(decryptionStreamBacking, decAlg.CreateDecryptor(), CryptoStreamMode.Write)
                decrypt.Write(edata1, 0, edata1.Length)
                decrypt.Flush()
                decrypt.Close()
                k2.Reset()
                Dim data2 As String = New UTF8Encoding(False).GetString(decryptionStreamBacking.ToArray())

                If Not data1.Equals(data2) Then
                    Console.WriteLine("Error: The two values are not equal.")
                Else
                    Console.WriteLine("The two values are equal.")
                    Console.WriteLine("k1 iterations: {0}", k1.IterationCount)
                    Console.WriteLine("k2 iterations: {0}", k2.IterationCount)
                End If
            Catch e As Exception
                Console.WriteLine("Error: ", e)
            End Try
        End If

    End Sub
End Class

Poznámky

Velikost soli musí být 8 bajtů nebo větší.

RFC 2898 obsahuje metody pro vytvoření vektoru klíče a inicializace (IV) z hesla a soli. K odvození klíčů můžete použít pbkDF2, funkci odvození klíče založené na heslech, pomocí pseudonáhodné funkce, která umožňuje vygenerovat klíče s prakticky neomezenou délkou. Třídu Rfc2898DeriveBytes lze použít k vytvoření odvozeného klíče ze základního klíče a dalších parametrů. Ve funkci odvození klíče založeného na heslech je základní klíč heslo a ostatní parametry jsou hodnotou soli a počtem iterací.

Další informace o PBKDF2 naleznete v dokumentu RFC 2898 s názvem PKCS #5: Password-Based specifikace kryptografie verze 2.0. Úplné podrobnosti najdete v části 5.2 PBKDF2.

Important

Nikdy pevně nezakódujte heslo ve zdrojovém kódu. Pevně zakódovaná hesla lze načíst ze sestavení pomocí Ildasm.exe (IL Disassembler) pomocí šestnáctkového editoru nebo jednoduše otevřením sestavení v textovém editoru, jako je Notepad.exe.

Viz také

Platí pro

Rfc2898DeriveBytes(String, Int32)

Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs

Upozornění

The constructors on Rfc2898DeriveBytes are obsolete. Use the static Pbkdf2 method instead.

Upozornění

The default hash algorithm and iteration counts in Rfc2898DeriveBytes constructors are outdated and insecure. Use a constructor that accepts the hash algorithm and the number of iterations.

Inicializuje novou instanci Rfc2898DeriveBytes třídy pomocí hesla a velikosti soli k odvození klíče.

public:
 Rfc2898DeriveBytes(System::String ^ password, int saltSize);
[System.Obsolete("The constructors on Rfc2898DeriveBytes are obsolete. Use the static Pbkdf2 method instead.", DiagnosticId="SYSLIB0060", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public Rfc2898DeriveBytes(string password, int saltSize);
public Rfc2898DeriveBytes(string password, int saltSize);
[System.Obsolete("The default hash algorithm and iteration counts in Rfc2898DeriveBytes constructors are outdated and insecure. Use a constructor that accepts the hash algorithm and the number of iterations.", DiagnosticId="SYSLIB0041", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public Rfc2898DeriveBytes(string password, int saltSize);
[<System.Obsolete("The constructors on Rfc2898DeriveBytes are obsolete. Use the static Pbkdf2 method instead.", DiagnosticId="SYSLIB0060", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
new System.Security.Cryptography.Rfc2898DeriveBytes : string * int -> System.Security.Cryptography.Rfc2898DeriveBytes
new System.Security.Cryptography.Rfc2898DeriveBytes : string * int -> System.Security.Cryptography.Rfc2898DeriveBytes
[<System.Obsolete("The default hash algorithm and iteration counts in Rfc2898DeriveBytes constructors are outdated and insecure. Use a constructor that accepts the hash algorithm and the number of iterations.", DiagnosticId="SYSLIB0041", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
new System.Security.Cryptography.Rfc2898DeriveBytes : string * int -> System.Security.Cryptography.Rfc2898DeriveBytes
Public Sub New (password As String, saltSize As Integer)

Parametry

password
String

Heslo použité k odvození klíče.

saltSize
Int32

Velikost náhodné soli, kterou má třída generovat.

Atributy

Výjimky

Zadaná velikost soli je menší než 8 bajtů.

Heslo nebo sůl je null.

Poznámky

Velikost soli musí být 8 bajtů nebo větší.

RFC 2898 obsahuje metody pro vytvoření vektoru klíče a inicializace (IV) z hesla a soli. K odvození klíčů můžete použít pbkDF2, funkci odvození klíče založené na heslech, pomocí pseudonáhodné funkce, která umožňuje vygenerovat klíče s prakticky neomezenou délkou. Třídu Rfc2898DeriveBytes lze použít k vytvoření odvozeného klíče ze základního klíče a dalších parametrů. Ve funkci odvození klíče založeného na heslech je základní klíč heslo a ostatní parametry jsou hodnotou soli a počtem iterací.

Další informace o PBKDF2 naleznete v dokumentu RFC 2898 s názvem PKCS #5: Password-Based specifikace kryptografie verze 2.0. Úplné podrobnosti najdete v části 5.2 PBKDF2.

Important

Nikdy pevně nezakódujte heslo ve zdrojovém kódu. Pevně zakódovaná hesla lze načíst ze sestavení pomocí Ildasm.exe (IL Disassembler) pomocí šestnáctkového editoru nebo jednoduše otevřením sestavení v textovém editoru, jako je Notepad.exe.

Viz také

Platí pro

Rfc2898DeriveBytes(Byte[], Byte[], Int32)

Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs

Upozornění

The constructors on Rfc2898DeriveBytes are obsolete. Use the static Pbkdf2 method instead.

Upozornění

The default hash algorithm and iteration counts in Rfc2898DeriveBytes constructors are outdated and insecure. Use a constructor that accepts the hash algorithm and the number of iterations.

Inicializuje novou instanci Rfc2898DeriveBytes třídy pomocí hesla, soli a počtu iterací pro odvození klíče.

public:
 Rfc2898DeriveBytes(cli::array <System::Byte> ^ password, cli::array <System::Byte> ^ salt, int iterations);
[System.Obsolete("The constructors on Rfc2898DeriveBytes are obsolete. Use the static Pbkdf2 method instead.", DiagnosticId="SYSLIB0060", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public Rfc2898DeriveBytes(byte[] password, byte[] salt, int iterations);
public Rfc2898DeriveBytes(byte[] password, byte[] salt, int iterations);
[System.Obsolete("The default hash algorithm and iteration counts in Rfc2898DeriveBytes constructors are outdated and insecure. Use a constructor that accepts the hash algorithm and the number of iterations.", DiagnosticId="SYSLIB0041", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public Rfc2898DeriveBytes(byte[] password, byte[] salt, int iterations);
[<System.Obsolete("The constructors on Rfc2898DeriveBytes are obsolete. Use the static Pbkdf2 method instead.", DiagnosticId="SYSLIB0060", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
new System.Security.Cryptography.Rfc2898DeriveBytes : byte[] * byte[] * int -> System.Security.Cryptography.Rfc2898DeriveBytes
new System.Security.Cryptography.Rfc2898DeriveBytes : byte[] * byte[] * int -> System.Security.Cryptography.Rfc2898DeriveBytes
[<System.Obsolete("The default hash algorithm and iteration counts in Rfc2898DeriveBytes constructors are outdated and insecure. Use a constructor that accepts the hash algorithm and the number of iterations.", DiagnosticId="SYSLIB0041", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
new System.Security.Cryptography.Rfc2898DeriveBytes : byte[] * byte[] * int -> System.Security.Cryptography.Rfc2898DeriveBytes
Public Sub New (password As Byte(), salt As Byte(), iterations As Integer)

Parametry

password
Byte[]

Heslo použité k odvození klíče.

salt
Byte[]

Klíčová sůl použitá k odvození klíče.

iterations
Int32

Počet iterací operace.

Atributy

Výjimky

Zadaná velikost soli je menší než 8 bajtů nebo počet iterací je menší než 1.

Heslo nebo sůl je null.

Poznámky

Velikost soli musí být 8 bajtů nebo větší a počet iterací musí být větší než nula.

RFC 2898 obsahuje metody pro vytvoření vektoru klíče a inicializace (IV) z hesla a soli. K odvození klíčů můžete použít pbkDF2, funkci odvození klíče založené na heslech, pomocí pseudonáhodné funkce, která umožňuje vygenerovat klíče s prakticky neomezenou délkou. Třídu Rfc2898DeriveBytes lze použít k vytvoření odvozeného klíče ze základního klíče a dalších parametrů. Ve funkci odvození klíče založeného na heslech je základní klíč heslo a ostatní parametry jsou hodnotou soli a počtem iterací.

Další informace o PBKDF2 naleznete v dokumentu RFC 2898 s názvem PKCS #5: Password-Based specifikace kryptografie verze 2.0. Úplné podrobnosti najdete v části 5.2 PBKDF2.

Important

Nikdy pevně nezakódujte heslo ve zdrojovém kódu. Pevně zakódovaná hesla lze načíst ze sestavení pomocí Ildasm.exe (IL Disassembler) pomocí šestnáctkového editoru nebo jednoduše otevřením sestavení v textovém editoru, jako je Notepad.exe.

Platí pro

Rfc2898DeriveBytes(String, Byte[], Int32)

Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs

Upozornění

The constructors on Rfc2898DeriveBytes are obsolete. Use the static Pbkdf2 method instead.

Upozornění

The default hash algorithm and iteration counts in Rfc2898DeriveBytes constructors are outdated and insecure. Use a constructor that accepts the hash algorithm and the number of iterations.

Inicializuje novou instanci Rfc2898DeriveBytes třídy pomocí hesla, soli a počtu iterací pro odvození klíče.

public:
 Rfc2898DeriveBytes(System::String ^ password, cli::array <System::Byte> ^ salt, int iterations);
[System.Obsolete("The constructors on Rfc2898DeriveBytes are obsolete. Use the static Pbkdf2 method instead.", DiagnosticId="SYSLIB0060", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public Rfc2898DeriveBytes(string password, byte[] salt, int iterations);
public Rfc2898DeriveBytes(string password, byte[] salt, int iterations);
[System.Obsolete("The default hash algorithm and iteration counts in Rfc2898DeriveBytes constructors are outdated and insecure. Use a constructor that accepts the hash algorithm and the number of iterations.", DiagnosticId="SYSLIB0041", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public Rfc2898DeriveBytes(string password, byte[] salt, int iterations);
[<System.Obsolete("The constructors on Rfc2898DeriveBytes are obsolete. Use the static Pbkdf2 method instead.", DiagnosticId="SYSLIB0060", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
new System.Security.Cryptography.Rfc2898DeriveBytes : string * byte[] * int -> System.Security.Cryptography.Rfc2898DeriveBytes
new System.Security.Cryptography.Rfc2898DeriveBytes : string * byte[] * int -> System.Security.Cryptography.Rfc2898DeriveBytes
[<System.Obsolete("The default hash algorithm and iteration counts in Rfc2898DeriveBytes constructors are outdated and insecure. Use a constructor that accepts the hash algorithm and the number of iterations.", DiagnosticId="SYSLIB0041", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
new System.Security.Cryptography.Rfc2898DeriveBytes : string * byte[] * int -> System.Security.Cryptography.Rfc2898DeriveBytes
Public Sub New (password As String, salt As Byte(), iterations As Integer)

Parametry

password
String

Heslo použité k odvození klíče.

salt
Byte[]

Klíčová sůl použitá k odvození klíče.

iterations
Int32

Počet iterací operace.

Atributy

Výjimky

Zadaná velikost soli je menší než 8 bajtů nebo počet iterací je menší než 1.

Heslo nebo sůl je null.

Příklady

Následující příklad kódu používá Rfc2898DeriveBytes třídu k vytvoření dvou identických klíčů pro Aes třídu. Potom pomocí klíčů zašifruje a dešifruje některá data.

using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;

public class rfc2898test
{
    // Generate a key k1 with password pwd1 and salt salt1.
    // Generate a key k2 with password pwd1 and salt salt1.
    // Encrypt data1 with key k1 using symmetric encryption, creating edata1.
    // Decrypt edata1 with key k2 using symmetric decryption, creating data2.
    // data2 should equal data1.

    private const string usageText = "Usage: RFC2898 <password>\nYou must specify the password for encryption.\n";
    public static void Main(string[] passwordargs)
    {
        //If no file name is specified, write usage text.
        if (passwordargs.Length == 0)
        {
            Console.WriteLine(usageText);
        }
        else
        {
            string pwd1 = passwordargs[0];
            // Create a byte array to hold the random value.
            byte[] salt1 = new byte[8];
            using (RandomNumberGenerator rng = RandomNumberGenerator.Create())
            {
                // Fill the array with a random value.
                rng.GetBytes(salt1);
            }

            //data1 can be a string or contents of a file.
            string data1 = "Some test data";
            //The legacy default iteration count is 1000 so the two methods use the same iteration count.
            int myIterations = 1000;
            try
            {
                Rfc2898DeriveBytes k1 = new Rfc2898DeriveBytes(pwd1, salt1,
myIterations);
                Rfc2898DeriveBytes k2 = new Rfc2898DeriveBytes(pwd1, salt1);
                // Encrypt the data.
                Aes encAlg = Aes.Create();
                encAlg.Key = k1.GetBytes(16);
                MemoryStream encryptionStream = new MemoryStream();
                CryptoStream encrypt = new CryptoStream(encryptionStream,
encAlg.CreateEncryptor(), CryptoStreamMode.Write);
                byte[] utfD1 = new System.Text.UTF8Encoding(false).GetBytes(
data1);

                encrypt.Write(utfD1, 0, utfD1.Length);
                encrypt.FlushFinalBlock();
                encrypt.Close();
                byte[] edata1 = encryptionStream.ToArray();
                k1.Reset();

                // Try to decrypt, thus showing it can be round-tripped.
                Aes decAlg = Aes.Create();
                decAlg.Key = k2.GetBytes(16);
                decAlg.IV = encAlg.IV;
                MemoryStream decryptionStreamBacking = new MemoryStream();
                CryptoStream decrypt = new CryptoStream(
decryptionStreamBacking, decAlg.CreateDecryptor(), CryptoStreamMode.Write);
                decrypt.Write(edata1, 0, edata1.Length);
                decrypt.Flush();
                decrypt.Close();
                k2.Reset();
                string data2 = new UTF8Encoding(false).GetString(
decryptionStreamBacking.ToArray());

                if (!data1.Equals(data2))
                {
                    Console.WriteLine("Error: The two values are not equal.");
                }
                else
                {
                    Console.WriteLine("The two values are equal.");
                    Console.WriteLine("k1 iterations: {0}", k1.IterationCount);
                    Console.WriteLine("k2 iterations: {0}", k2.IterationCount);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Error: {0}", e);
            }
        }
    }
}
Imports System.IO
Imports System.Text
Imports System.Security.Cryptography



Public Class rfc2898test
    ' Generate a key k1 with password pwd1 and salt salt1.
    ' Generate a key k2 with password pwd1 and salt salt1.
    ' Encrypt data1 with key k1 using symmetric encryption, creating edata1.
    ' Decrypt edata1 with key k2 using symmetric decryption, creating data2.
    ' data2 should equal data1.
    Private Const usageText As String = "Usage: RFC2898 <password>" + vbLf + "You must specify the password for encryption." + vbLf

    Public Shared Sub Main(ByVal passwordargs() As String)
        'If no file name is specified, write usage text.
        If passwordargs.Length = 0 Then
            Console.WriteLine(usageText)
        Else
            Dim pwd1 As String = passwordargs(0)

            Dim salt1(8) As Byte
            Using rng As RandomNumberGenerator = RandomNumberGenerator.Create()
                rng.GetBytes(salt1)
            End Using
            'data1 can be a string or contents of a file.
            Dim data1 As String = "Some test data"
            'The legacy default iteration count is 1000 so the two methods use the same iteration count.
            Dim myIterations As Integer = 1000
            Try
                Dim k1 As New Rfc2898DeriveBytes(pwd1, salt1, myIterations)
                Dim k2 As New Rfc2898DeriveBytes(pwd1, salt1)
                ' Encrypt the data.
                Dim encAlg As Aes = Aes.Create()
                encAlg.Key = k1.GetBytes(16)
                Dim encryptionStream As New MemoryStream()
                Dim encrypt As New CryptoStream(encryptionStream, encAlg.CreateEncryptor(), CryptoStreamMode.Write)
                Dim utfD1 As Byte() = New System.Text.UTF8Encoding(False).GetBytes(data1)
                encrypt.Write(utfD1, 0, utfD1.Length)
                encrypt.FlushFinalBlock()
                encrypt.Close()
                Dim edata1 As Byte() = encryptionStream.ToArray()
                k1.Reset()

                ' Try to decrypt, thus showing it can be round-tripped.
                Dim decAlg As Aes = Aes.Create()
                decAlg.Key = k2.GetBytes(16)
                decAlg.IV = encAlg.IV
                Dim decryptionStreamBacking As New MemoryStream()
                Dim decrypt As New CryptoStream(decryptionStreamBacking, decAlg.CreateDecryptor(), CryptoStreamMode.Write)
                decrypt.Write(edata1, 0, edata1.Length)
                decrypt.Flush()
                decrypt.Close()
                k2.Reset()
                Dim data2 As String = New UTF8Encoding(False).GetString(decryptionStreamBacking.ToArray())

                If Not data1.Equals(data2) Then
                    Console.WriteLine("Error: The two values are not equal.")
                Else
                    Console.WriteLine("The two values are equal.")
                    Console.WriteLine("k1 iterations: {0}", k1.IterationCount)
                    Console.WriteLine("k2 iterations: {0}", k2.IterationCount)
                End If
            Catch e As Exception
                Console.WriteLine("Error: ", e)
            End Try
        End If

    End Sub
End Class

Poznámky

Velikost soli musí být 8 bajtů nebo větší a počet iterací musí být větší než nula.

RFC 2898 obsahuje metody pro vytvoření vektoru klíče a inicializace (IV) z hesla a soli. K odvození klíčů můžete použít pbkDF2, funkci odvození klíče založené na heslech, pomocí pseudonáhodné funkce, která umožňuje vygenerovat klíče s prakticky neomezenou délkou. Třídu Rfc2898DeriveBytes lze použít k vytvoření odvozeného klíče ze základního klíče a dalších parametrů. Ve funkci odvození klíče založeného na heslech je základní klíč heslo a ostatní parametry jsou hodnotou soli a počtem iterací.

Další informace o PBKDF2 naleznete v dokumentu RFC 2898 s názvem PKCS #5: Password-Based specifikace kryptografie verze 2.0. Úplné podrobnosti najdete v části 5.2 PBKDF2.

Important

Nikdy pevně nezakódujte heslo ve zdrojovém kódu. Pevně zakódovaná hesla lze načíst ze sestavení pomocí Ildasm.exe (IL Disassembler) pomocí šestnáctkového editoru nebo jednoduše otevřením sestavení v textovém editoru, jako je Notepad.exe.

Viz také

Platí pro

Rfc2898DeriveBytes(String, Int32, Int32)

Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs

Upozornění

The constructors on Rfc2898DeriveBytes are obsolete. Use the static Pbkdf2 method instead.

Upozornění

The default hash algorithm and iteration counts in Rfc2898DeriveBytes constructors are outdated and insecure. Use a constructor that accepts the hash algorithm and the number of iterations.

Inicializuje novou instanci Rfc2898DeriveBytes třídy pomocí hesla, velikosti soli a počtu iterací pro odvození klíče.

public:
 Rfc2898DeriveBytes(System::String ^ password, int saltSize, int iterations);
[System.Obsolete("The constructors on Rfc2898DeriveBytes are obsolete. Use the static Pbkdf2 method instead.", DiagnosticId="SYSLIB0060", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public Rfc2898DeriveBytes(string password, int saltSize, int iterations);
public Rfc2898DeriveBytes(string password, int saltSize, int iterations);
[System.Obsolete("The default hash algorithm and iteration counts in Rfc2898DeriveBytes constructors are outdated and insecure. Use a constructor that accepts the hash algorithm and the number of iterations.", DiagnosticId="SYSLIB0041", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public Rfc2898DeriveBytes(string password, int saltSize, int iterations);
[<System.Obsolete("The constructors on Rfc2898DeriveBytes are obsolete. Use the static Pbkdf2 method instead.", DiagnosticId="SYSLIB0060", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
new System.Security.Cryptography.Rfc2898DeriveBytes : string * int * int -> System.Security.Cryptography.Rfc2898DeriveBytes
new System.Security.Cryptography.Rfc2898DeriveBytes : string * int * int -> System.Security.Cryptography.Rfc2898DeriveBytes
[<System.Obsolete("The default hash algorithm and iteration counts in Rfc2898DeriveBytes constructors are outdated and insecure. Use a constructor that accepts the hash algorithm and the number of iterations.", DiagnosticId="SYSLIB0041", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
new System.Security.Cryptography.Rfc2898DeriveBytes : string * int * int -> System.Security.Cryptography.Rfc2898DeriveBytes
Public Sub New (password As String, saltSize As Integer, iterations As Integer)

Parametry

password
String

Heslo použité k odvození klíče.

saltSize
Int32

Velikost náhodné soli, kterou má třída generovat.

iterations
Int32

Počet iterací operace.

Atributy

Výjimky

Zadaná velikost soli je menší než 8 bajtů nebo počet iterací je menší než 1.

Heslo nebo sůl je null.

iterations je mimo rozsah. Tento parametr vyžaduje nezáporné číslo.

Poznámky

Velikost soli musí být 8 bajtů nebo větší a počet iterací musí být větší než nula.

RFC 2898 obsahuje metody pro vytvoření vektoru klíče a inicializace (IV) z hesla a soli. K odvození klíčů můžete použít pbkDF2, funkci odvození klíče založené na heslech, pomocí pseudonáhodné funkce, která umožňuje vygenerovat klíče s prakticky neomezenou délkou. Třídu Rfc2898DeriveBytes lze použít k vytvoření odvozeného klíče ze základního klíče a dalších parametrů. Ve funkci odvození klíče založeného na heslech je základní klíč heslo a ostatní parametry jsou hodnotou soli a počtem iterací.

Další informace o PBKDF2 naleznete v dokumentu RFC 2898 s názvem PKCS #5: Password-Based specifikace kryptografie verze 2.0. Úplné podrobnosti najdete v části 5.2 PBKDF2.

Important

Nikdy pevně nezakódujte heslo ve zdrojovém kódu. Pevně zakódovaná hesla lze načíst ze sestavení pomocí Ildasm.exe (IL Disassembler) pomocí šestnáctkového editoru nebo jednoduše otevřením sestavení v textovém editoru, jako je Notepad.exe.

Viz také

Platí pro

Rfc2898DeriveBytes(Byte[], Byte[], Int32, HashAlgorithmName)

Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs

Upozornění

The constructors on Rfc2898DeriveBytes are obsolete. Use the static Pbkdf2 method instead.

Inicializuje novou instanci Rfc2898DeriveBytes třídy pomocí zadaného hesla, soli, počtu iterací a názvu hash algoritmu k odvození klíče.

public:
 Rfc2898DeriveBytes(cli::array <System::Byte> ^ password, cli::array <System::Byte> ^ salt, int iterations, System::Security::Cryptography::HashAlgorithmName hashAlgorithm);
[System.Obsolete("The constructors on Rfc2898DeriveBytes are obsolete. Use the static Pbkdf2 method instead.", DiagnosticId="SYSLIB0060", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public Rfc2898DeriveBytes(byte[] password, byte[] salt, int iterations, System.Security.Cryptography.HashAlgorithmName hashAlgorithm);
public Rfc2898DeriveBytes(byte[] password, byte[] salt, int iterations, System.Security.Cryptography.HashAlgorithmName hashAlgorithm);
[<System.Obsolete("The constructors on Rfc2898DeriveBytes are obsolete. Use the static Pbkdf2 method instead.", DiagnosticId="SYSLIB0060", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
new System.Security.Cryptography.Rfc2898DeriveBytes : byte[] * byte[] * int * System.Security.Cryptography.HashAlgorithmName -> System.Security.Cryptography.Rfc2898DeriveBytes
new System.Security.Cryptography.Rfc2898DeriveBytes : byte[] * byte[] * int * System.Security.Cryptography.HashAlgorithmName -> System.Security.Cryptography.Rfc2898DeriveBytes
Public Sub New (password As Byte(), salt As Byte(), iterations As Integer, hashAlgorithm As HashAlgorithmName)

Parametry

password
Byte[]

Heslo, které se má použít k odvození klíče.

salt
Byte[]

Klíčová sůl, která se má použít k odvození klíče.

iterations
Int32

Počet iterací operace.

hashAlgorithm
HashAlgorithmName

Algoritmus hash, který se má použít k odvození klíče.

Atributy

Výjimky

Vlastnost NamehashAlgorithm je buď null nebo Empty.

Název hashovacího algoritmu je neplatný.

Platí pro

Rfc2898DeriveBytes(String, Byte[], Int32, HashAlgorithmName)

Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs

Upozornění

The constructors on Rfc2898DeriveBytes are obsolete. Use the static Pbkdf2 method instead.

Inicializuje novou instanci Rfc2898DeriveBytes třídy pomocí zadaného hesla, soli, počtu iterací a názvu hash algoritmu k odvození klíče.

public:
 Rfc2898DeriveBytes(System::String ^ password, cli::array <System::Byte> ^ salt, int iterations, System::Security::Cryptography::HashAlgorithmName hashAlgorithm);
[System.Obsolete("The constructors on Rfc2898DeriveBytes are obsolete. Use the static Pbkdf2 method instead.", DiagnosticId="SYSLIB0060", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public Rfc2898DeriveBytes(string password, byte[] salt, int iterations, System.Security.Cryptography.HashAlgorithmName hashAlgorithm);
public Rfc2898DeriveBytes(string password, byte[] salt, int iterations, System.Security.Cryptography.HashAlgorithmName hashAlgorithm);
[<System.Obsolete("The constructors on Rfc2898DeriveBytes are obsolete. Use the static Pbkdf2 method instead.", DiagnosticId="SYSLIB0060", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
new System.Security.Cryptography.Rfc2898DeriveBytes : string * byte[] * int * System.Security.Cryptography.HashAlgorithmName -> System.Security.Cryptography.Rfc2898DeriveBytes
new System.Security.Cryptography.Rfc2898DeriveBytes : string * byte[] * int * System.Security.Cryptography.HashAlgorithmName -> System.Security.Cryptography.Rfc2898DeriveBytes
Public Sub New (password As String, salt As Byte(), iterations As Integer, hashAlgorithm As HashAlgorithmName)

Parametry

password
String

Heslo, které se má použít k odvození klíče.

salt
Byte[]

Klíčová sůl, která se má použít k odvození klíče.

iterations
Int32

Počet iterací operace.

hashAlgorithm
HashAlgorithmName

Algoritmus hash, který se má použít k odvození klíče.

Atributy

Výjimky

Vlastnost NamehashAlgorithm je buď null nebo Empty.

Název hashovacího algoritmu je neplatný.

Platí pro

Rfc2898DeriveBytes(String, Int32, Int32, HashAlgorithmName)

Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs
Zdroj:
Rfc2898DeriveBytes.cs

Upozornění

The constructors on Rfc2898DeriveBytes are obsolete. Use the static Pbkdf2 method instead.

Inicializuje novou instanci třídy pomocí zadaného Rfc2898DeriveBytes hesla, velikosti soli, počtu iterací a názvu algoritmu hash k odvození klíče.

public:
 Rfc2898DeriveBytes(System::String ^ password, int saltSize, int iterations, System::Security::Cryptography::HashAlgorithmName hashAlgorithm);
[System.Obsolete("The constructors on Rfc2898DeriveBytes are obsolete. Use the static Pbkdf2 method instead.", DiagnosticId="SYSLIB0060", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public Rfc2898DeriveBytes(string password, int saltSize, int iterations, System.Security.Cryptography.HashAlgorithmName hashAlgorithm);
public Rfc2898DeriveBytes(string password, int saltSize, int iterations, System.Security.Cryptography.HashAlgorithmName hashAlgorithm);
[<System.Obsolete("The constructors on Rfc2898DeriveBytes are obsolete. Use the static Pbkdf2 method instead.", DiagnosticId="SYSLIB0060", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
new System.Security.Cryptography.Rfc2898DeriveBytes : string * int * int * System.Security.Cryptography.HashAlgorithmName -> System.Security.Cryptography.Rfc2898DeriveBytes
new System.Security.Cryptography.Rfc2898DeriveBytes : string * int * int * System.Security.Cryptography.HashAlgorithmName -> System.Security.Cryptography.Rfc2898DeriveBytes
Public Sub New (password As String, saltSize As Integer, iterations As Integer, hashAlgorithm As HashAlgorithmName)

Parametry

password
String

Heslo, které se má použít k odvození klíče.

saltSize
Int32

Velikost náhodné soli, kterou má třída generovat.

iterations
Int32

Počet iterací operace.

hashAlgorithm
HashAlgorithmName

Algoritmus hash, který se má použít k odvození klíče.

Atributy

Výjimky

Hodnota saltSize je menší než nula.

Vlastnost NamehashAlgorithm je buď null nebo Empty.

Název hashovacího algoritmu je neplatný.

Platí pro