PasswordDeriveBytes Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Deriva una clave de una contraseña mediante una extensión del algoritmo PBKDF1.
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
- Herencia
- Atributos
Ejemplos
En el ejemplo de código siguiente se crea una clave a partir de una contraseña mediante la PasswordDeriveBytes clase .
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
Comentarios
Esta clase usa una extensión del algoritmo PBKDF1 definido en el estándar PKCS#5 v2.0 para derivar bytes adecuados para su uso como material clave de una contraseña. El estándar se documenta en IETF RRC 2898.
Importante
Nunca codifique de forma rígida una contraseña en el código fuente. Las contraseñas codificadas de forma rígida se pueden recuperar de un ensamblado mediante la herramienta Ildasm.exe (desensamblador de IL), un editor hexadecimal o simplemente abriendo el ensamblado en un editor de texto como notepad.exe.
Constructores
| Nombre | Description |
|---|---|
| PasswordDeriveBytes(Byte[], Byte[], CspParameters) |
Inicializa una nueva instancia de la PasswordDeriveBytes clase que especifica la contraseña, la sal de claves y el proveedor de servicios criptográficos (CSP) que se van a usar para derivar la clave. |
| PasswordDeriveBytes(Byte[], Byte[], String, Int32, CspParameters) |
Inicializa una nueva instancia de la PasswordDeriveBytes clase que especifica la contraseña, la sal de clave, el nombre hash, las iteraciones y el proveedor de servicios criptográficos (CSP) que se van a usar para derivar la clave. |
| PasswordDeriveBytes(Byte[], Byte[], String, Int32) |
Inicializa una nueva instancia de la PasswordDeriveBytes clase que especifica la contraseña, la sal de clave, el nombre hash y las iteraciones que se usarán para derivar la clave. |
| PasswordDeriveBytes(Byte[], Byte[]) |
Inicializa una nueva instancia de la PasswordDeriveBytes clase que especifica la contraseña y la sal de clave que se va a usar para derivar la clave. |
| PasswordDeriveBytes(String, Byte[], CspParameters) |
Inicializa una nueva instancia de la PasswordDeriveBytes clase con los parámetros de contraseña, sal de claves y proveedor de servicios criptográficos (CSP) que se van a usar para derivar la clave. |
| PasswordDeriveBytes(String, Byte[], String, Int32, CspParameters) |
Inicializa una nueva instancia de la PasswordDeriveBytes clase con la contraseña, la sal de clave, el nombre hash, el número de iteraciones y los parámetros del proveedor de servicios criptográficos (CSP) que se van a usar para derivar la clave. |
| PasswordDeriveBytes(String, Byte[], String, Int32) |
Inicializa una nueva instancia de la PasswordDeriveBytes clase con la contraseña, la sal de clave, el nombre hash y el número de iteraciones que se usarán para derivar la clave. |
| PasswordDeriveBytes(String, Byte[]) |
Inicializa una nueva instancia de la PasswordDeriveBytes clase con la contraseña y la sal de clave que se van a usar para derivar la clave. |
Propiedades
| Nombre | Description |
|---|---|
| HashName |
Obtiene o establece el nombre del algoritmo hash para la operación. |
| IterationCount |
Obtiene o establece el número de iteraciones para la operación. |
| Salt |
Obtiene o establece el valor de sal de clave para la operación. |
Métodos
| Nombre | Description |
|---|---|
| CryptDeriveKey(String, String, Int32, Byte[]) |
Deriva una clave criptográfica del PasswordDeriveBytes objeto . |
| Dispose() |
Cuando se reemplaza en una clase derivada, libera todos los recursos usados por la instancia actual de la DeriveBytes clase . (Heredado de DeriveBytes) |
| Dispose(Boolean) |
Libera los recursos no administrados usados por la PasswordDeriveBytes clase y, opcionalmente, libera los recursos administrados. |
| Equals(Object) |
Determina si el objeto especificado es igual al objeto actual. (Heredado de Object) |
| Finalize() |
Permite a un objeto intentar liberar recursos y realizar otras operaciones de limpieza antes de que la recolección de elementos no utilizados la recupere. |
| GetBytes(Int32) |
Obsoletos.
Devuelve bytes de clave pseudoaleatoriedad. |
| GetHashCode() |
Actúa como la función hash predeterminada. (Heredado de Object) |
| GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
| MemberwiseClone() |
Crea una copia superficial del Objectactual. (Heredado de Object) |
| Reset() |
Restablece el estado de la operación. |
| ToString() |
Devuelve una cadena que representa el objeto actual. (Heredado de Object) |