PasswordDeriveBytes Klas
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee wordt een sleutel afgeleid van een wachtwoord met behulp van een extensie van het PBKDF1-algoritme.
public ref class PasswordDeriveBytes : System::Security::Cryptography::DeriveBytes
public class PasswordDeriveBytes : System.Security.Cryptography.DeriveBytes
[System.Runtime.InteropServices.ComVisible(true)]
public class PasswordDeriveBytes : System.Security.Cryptography.DeriveBytes
type PasswordDeriveBytes = class
inherit DeriveBytes
[<System.Runtime.InteropServices.ComVisible(true)>]
type PasswordDeriveBytes = class
inherit DeriveBytes
Public Class PasswordDeriveBytes
Inherits DeriveBytes
- Overname
- Kenmerken
Voorbeelden
In het volgende codevoorbeeld wordt een sleutel gemaakt op basis van een wachtwoord met behulp van de PasswordDeriveBytes klasse.
using System;
using System.Security.Cryptography;
using System.Text;
public class PasswordDerivedBytesExample
{
public static void Main(String[] args)
{
// Get a password from the user.
Console.WriteLine("Enter a password to produce a key:");
byte[] pwd = Encoding.Unicode.GetBytes(Console.ReadLine());
byte[] salt = CreateRandomSalt(7);
// Create a TripleDESCryptoServiceProvider object.
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
try
{
Console.WriteLine("Creating a key with PasswordDeriveBytes...");
// Create a PasswordDeriveBytes object and then create
// a TripleDES key from the password and salt.
PasswordDeriveBytes pdb = new PasswordDeriveBytes(pwd, salt);
// Create the key and set it to the Key property
// of the TripleDESCryptoServiceProvider object.
// This example uses the SHA1 algorithm.
// Due to collision problems with SHA1, Microsoft recommends SHA256 or better.
tdes.Key = pdb.CryptDeriveKey("TripleDES", "SHA1", 192, tdes.IV);
Console.WriteLine("Operation complete.");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
// Clear the buffers
ClearBytes(pwd);
ClearBytes(salt);
// Clear the key.
tdes.Clear();
}
Console.ReadLine();
}
//////////////////////////////////////////////////////////
// Helper methods:
// CreateRandomSalt: Generates a random salt value of the
// specified length.
//
// ClearBytes: Clear the bytes in a buffer so they can't
// later be read from memory.
//////////////////////////////////////////////////////////
public static byte[] CreateRandomSalt(int length)
{
// Create a buffer
byte[] randBytes;
if (length >= 1)
{
randBytes = new byte[length];
}
else
{
randBytes = new byte[1];
}
using (RandomNumberGenerator rng = RandomNumberGenerator.Create())
{
// Fill the buffer with random bytes.
rng.GetBytes(randBytes);
}
// return the bytes.
return randBytes;
}
public static void ClearBytes(byte[] buffer)
{
// Check arguments.
if (buffer == null)
{
throw new ArgumentException("buffer");
}
// Set each byte in the buffer to 0.
for (int x = 0; x < buffer.Length; x++)
{
buffer[x] = 0;
}
}
}
Imports System.Security.Cryptography
Imports System.Text
Module PasswordDerivedBytesExample
Sub Main(ByVal args() As String)
' Get a password from the user.
Console.WriteLine("Enter a password to produce a key:")
Dim pwd As Byte() = Encoding.Unicode.GetBytes(Console.ReadLine())
Dim salt As Byte() = CreateRandomSalt(7)
' Create a TripleDESCryptoServiceProvider object.
Dim tdes As New TripleDESCryptoServiceProvider()
Try
Console.WriteLine("Creating a key with PasswordDeriveBytes...")
' Create a PasswordDeriveBytes object and then create
' a TripleDES key from the password and salt.
Dim pdb As New PasswordDeriveBytes(pwd, salt)
' Create the key and set it to the Key property
' of the TripleDESCryptoServiceProvider object.
' This example uses the SHA1 algorithm.
' Due to collision problems with SHA1, Microsoft recommends SHA256 or better.
tdes.Key = pdb.CryptDeriveKey("TripleDES", "SHA1", 192, tdes.IV)
Console.WriteLine("Operation complete.")
Catch e As Exception
Console.WriteLine(e.Message)
Finally
' Clear the buffers
ClearBytes(pwd)
ClearBytes(salt)
' Clear the key.
tdes.Clear()
End Try
Console.ReadLine()
End Sub
'********************************************************
'* Helper methods:
'* createRandomSalt: Generates a random salt value of the
'* specified length.
'*
'* clearBytes: Clear the bytes in a buffer so they can't
'* later be read from memory.
'********************************************************
Function CreateRandomSalt(ByVal length As Integer) As Byte()
' Create a buffer
Dim randBytes() As Byte
If length >= 1 Then
randBytes = New Byte(length) {}
Else
randBytes = New Byte(0) {}
End If
' Create a new RandomNumberGenerator.
Using rand As RandomNumberGenerator = RandomNumberGenerator.Create()
' Fill the buffer with random bytes.
rand.GetBytes(randBytes)
End Using
' return the bytes.
Return randBytes
End Function
Sub ClearBytes(ByVal buffer() As Byte)
' Check arguments.
If buffer Is Nothing Then
Throw New ArgumentException("buffer")
End If
' Set each byte in the buffer to 0.
Dim x As Integer
For x = 0 To buffer.Length - 1
buffer(x) = 0
Next x
End Sub
End Module
Opmerkingen
Deze klasse maakt gebruik van een uitbreiding van het PBKDF1-algoritme dat is gedefinieerd in de PKCS#5 v2.0-standaard om bytes af te leiden die geschikt zijn voor gebruik als sleutelmateriaal van een wachtwoord. De standaard wordt beschreven in IETF RRC 2898.
Important
Codeer nooit een wachtwoord in uw broncode. In code vastgelegde wachtwoorden kunnen worden opgehaald uit een assembly met behulp van het hulpprogrammaIldasm.exe (IL Disassembler), een hex-editor of door de assembly in een teksteditor zoals notepad.exete openen.
Constructors
| Name | Description |
|---|---|
| PasswordDeriveBytes(Byte[], Byte[], CspParameters) |
Initialiseert een nieuw exemplaar van de PasswordDeriveBytes klasse dat het wachtwoord, het sleutelzout en de cryptografische serviceprovider (CSP) opgeeft die moet worden gebruikt om de sleutel af te leiden. |
| PasswordDeriveBytes(Byte[], Byte[], String, Int32, CspParameters) |
Initialiseert een nieuw exemplaar van de PasswordDeriveBytes klasse waarin het wachtwoord, sleutelzout, hashnaam, iteraties en cryptografische serviceprovider (CSP) wordt opgegeven om de sleutel af te leiden. |
| PasswordDeriveBytes(Byte[], Byte[], String, Int32) |
Initialiseert een nieuw exemplaar van de PasswordDeriveBytes klasse waarin het wachtwoord, sleutelzout, hashnaam en iteraties worden opgegeven die moeten worden gebruikt om de sleutel af te leiden. |
| PasswordDeriveBytes(Byte[], Byte[]) |
Initialiseert een nieuw exemplaar van de PasswordDeriveBytes klasse waarin het wachtwoord en sleutelzout worden opgegeven dat moet worden gebruikt om de sleutel af te leiden. |
| PasswordDeriveBytes(String, Byte[], CspParameters) |
Initialiseert een nieuw exemplaar van de PasswordDeriveBytes klasse met de parameters wachtwoord, sleutelzout en cryptografische serviceprovider (CSP) die moeten worden gebruikt om de sleutel af te leiden. |
| PasswordDeriveBytes(String, Byte[], String, Int32, CspParameters) |
Initialiseert een nieuw exemplaar van de PasswordDeriveBytes klasse met het wachtwoord, sleutelzout, hashnaam, aantal iteraties en CSP-parameters (cryptografische serviceprovider) die moeten worden gebruikt om de sleutel af te leiden. |
| PasswordDeriveBytes(String, Byte[], String, Int32) |
Initialiseert een nieuw exemplaar van de PasswordDeriveBytes klasse met het wachtwoord, sleutelzout, hashnaam en het aantal iteraties dat moet worden gebruikt om de sleutel af te leiden. |
| PasswordDeriveBytes(String, Byte[]) |
Initialiseert een nieuw exemplaar van de PasswordDeriveBytes klasse met het wachtwoord en sleutelzout dat moet worden gebruikt om de sleutel af te leiden. |
Eigenschappen
| Name | Description |
|---|---|
| HashName |
Hiermee haalt u de naam van het hash-algoritme voor de bewerking op of stelt u deze in. |
| IterationCount |
Hiermee haalt u het aantal iteraties voor de bewerking op of stelt u deze in. |
| Salt |
Hiermee haalt u de sleutelzoutwaarde voor de bewerking op of stelt u deze in. |
Methoden
| Name | Description |
|---|---|
| CryptDeriveKey(String, String, Int32, Byte[]) |
Hiermee wordt een cryptografische sleutel afgeleid van het PasswordDeriveBytes object. |
| Dispose() |
Wanneer deze wordt overschreven in een afgeleide klasse, worden alle resources uitgegeven die worden gebruikt door het huidige exemplaar van de DeriveBytes klasse. (Overgenomen van DeriveBytes) |
| Dispose(Boolean) |
Publiceert de niet-beheerde resources die door de PasswordDeriveBytes klasse worden gebruikt en brengt eventueel de beheerde resources vrij. |
| Equals(Object) |
Bepaalt of het opgegeven object gelijk is aan het huidige object. (Overgenomen van Object) |
| Finalize() |
Hiermee kan een object resources vrijmaken en andere opschoonbewerkingen uitvoeren voordat het wordt vrijgemaakt door garbagecollection. |
| GetBytes(Int32) |
Verouderd.
Retourneert pseudo-willekeurige sleutelbytes. |
| GetHashCode() |
Fungeert als de standaardhashfunctie. (Overgenomen van Object) |
| GetType() |
Hiermee haalt u de Type huidige instantie op. (Overgenomen van Object) |
| MemberwiseClone() |
Hiermee maakt u een ondiepe kopie van de huidige Object. (Overgenomen van Object) |
| Reset() |
Hiermee stelt u de status van de bewerking opnieuw in. |
| ToString() |
Retourneert een tekenreeks die het huidige object vertegenwoordigt. (Overgenomen van Object) |