PasswordDeriveBytes 클래스

정의

PBKDF1 알고리즘의 확장을 사용하여 암호에서 키를 파생시킵니다.Derives a key from a password using an extension of the PBKDF1 algorithm.

public ref class PasswordDeriveBytes : System::Security::Cryptography::DeriveBytes
[System.Runtime.InteropServices.ComVisible(true)]
public class PasswordDeriveBytes : System.Security.Cryptography.DeriveBytes
type PasswordDeriveBytes = class
    inherit DeriveBytes
Public Class PasswordDeriveBytes
Inherits DeriveBytes
상속
PasswordDeriveBytes
특성

예제

다음 코드 예제에서는 사용 하 여 암호에서 키를 만듭니다를 PasswordDeriveBytes 클래스입니다.The following code example creates a key from a password using the PasswordDeriveBytes class.

using namespace System;
using namespace System::Security::Cryptography;
using namespace System::Text;

// Generates a random salt value of the specified length.
array<Byte>^ CreateRandomSalt(int length)
{
    // Create a buffer
    array<Byte>^ randomBytes;

    if (length >= 1)
    {
        randomBytes = gcnew array <Byte>(length);
    }
    else
    {
        randomBytes = gcnew array <Byte>(1);
    }

    // Create a new RNGCryptoServiceProvider.
    RNGCryptoServiceProvider^ cryptoRNGProvider =
        gcnew RNGCryptoServiceProvider();

    // Fill the buffer with random bytes.
    cryptoRNGProvider->GetBytes(randomBytes);

    // return the bytes.
    return randomBytes;
}

// Clears the bytes in a buffer so they can't later be read from memory.
void ClearBytes(array<Byte>^ buffer)
{
    // Check arguments.
    if (buffer == nullptr)
    {
        throw gcnew ArgumentNullException("buffer");
    }

    // Set each byte in the buffer to 0.
    for (int x = 0; x <= buffer->Length - 1; x++)
    {
        buffer[x] = 0;
    }
}

int main(array<String^>^ args)
{

    // Get a password from the user.
    Console::WriteLine("Enter a password to produce a key:");

    // Security Note: Never hard-code a password within your
    // source code.  Hard-coded passwords can be retrieved
    // from a compiled assembly.
    array<Byte>^ password = Encoding::Unicode->GetBytes(Console::ReadLine());

    array<Byte>^ randomSalt = CreateRandomSalt(7);

    // Create a TripleDESCryptoServiceProvider object.
    TripleDESCryptoServiceProvider^ cryptoDESProvider =
        gcnew 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^ passwordDeriveBytes = gcnew PasswordDeriveBytes
            (password->ToString(), randomSalt);

       // Create the key and set it to the Key property
       // of the TripleDESCryptoServiceProvider object.
        cryptoDESProvider->Key = passwordDeriveBytes->CryptDeriveKey
            ("TripleDES", "SHA1", 192, cryptoDESProvider->IV);
        Console::WriteLine("Operation complete.");
    }
    catch (Exception^ ex)
    {
        Console::WriteLine(ex->Message);
    }
    finally
    {
        // Clear the buffers
        ClearBytes(password);
        ClearBytes(randomSalt);

        // Clear the key.
        cryptoDESProvider->Clear();
    }

    Console::ReadLine();
}
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.
            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];
        }

        // Create a new RNGCryptoServiceProvider.
        RNGCryptoServiceProvider rand = new RNGCryptoServiceProvider();

        // Fill the buffer with random bytes.
        rand.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.
            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 RNGCryptoServiceProvider.
        Dim rand As New RNGCryptoServiceProvider()

        ' Fill the buffer with random bytes.
        rand.GetBytes(randBytes)

        ' 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

설명

이 클래스는 암호에서 키 자료로 사용 하기에 적합 한 바이트를 파생 시키는 PKCS #5 v2.0 표준에 정의 된 PBKDF1 알고리즘의 확장을 사용 합니다.This class uses an extension of the PBKDF1 algorithm defined in the PKCS#5 v2.0 standard to derive bytes suitable for use as key material from a password. 표준은 IETF RRC 2898에 설명 되어 있습니다.The standard is documented in IETF RRC 2898.

중요

하드 코드 하지 소스 코드 내에서 암호입니다.Never hard-code a password within your source code. 사용 하 여 어셈블리에서 하드 코드 된 암호를 검색할 수는 Ildasm.exe (IL 디스어셈블러) 도구, 편집기를 16 진수 또는 notepad.exe와 같은 텍스트 편집기에서 어셈블리를 여는 합니다.Hard coded passwords can be retrieved from an assembly using the Ildasm.exe (IL Disassembler) tool, a hex editor, or by simply opening up the assembly in a text editor like notepad.exe.

생성자

PasswordDeriveBytes(Byte[], Byte[])

키를 파생시키는 데 사용할 암호 및 키 솔트를 지정하는 PasswordDeriveBytes 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the PasswordDeriveBytes class specifying the password and key salt to use to derive the key.

PasswordDeriveBytes(Byte[], Byte[], CspParameters)

키를 파생시키는 데 사용할 암호, 키 솔트 및 CSP(암호화 서비스 공급자)를 지정하는 PasswordDeriveBytes 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the PasswordDeriveBytes class specifying the password, key salt, and cryptographic service provider (CSP) to use to derive the key.

PasswordDeriveBytes(Byte[], Byte[], String, Int32)

키를 파생시키는 데 사용할 암호, 키 솔트, 해시 이름 및 반복을 지정하는 PasswordDeriveBytes 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the PasswordDeriveBytes class specifying the password, key salt, hash name, and iterations to use to derive the key.

PasswordDeriveBytes(Byte[], Byte[], String, Int32, CspParameters)

키를 파생시키는 데 사용할 암호, 키 솔트, 해시 이름, 반복 횟수 및 CSP(암호화 서비스 공급자)를 지정하는 PasswordDeriveBytes 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the PasswordDeriveBytes class specifying the password, key salt, hash name, iterations, and cryptographic service provider (CSP) to use to derive the key.

PasswordDeriveBytes(String, Byte[])

키를 파생시키는 데 사용할 암호 및 키 솔트를 사용하여 PasswordDeriveBytes 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the PasswordDeriveBytes class with the password and key salt to use to derive the key.

PasswordDeriveBytes(String, Byte[], CspParameters)

키를 파생시키는 데 사용할 암호, 키 솔트 및 CSP(암호화 서비스 공급자) 매개 변수를 사용하여 PasswordDeriveBytes 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the PasswordDeriveBytes class with the password, key salt, and cryptographic service provider (CSP) parameters to use to derive the key.

PasswordDeriveBytes(String, Byte[], String, Int32)

키를 파생시키는 데 사용할 암호, 키 솔트, 해시 이름 및 반복 횟수를 사용하여 PasswordDeriveBytes 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the PasswordDeriveBytes class with the password, key salt, hash name, and number of iterations to use to derive the key.

PasswordDeriveBytes(String, Byte[], String, Int32, CspParameters)

키를 파생시키는 데 사용할 암호, 키 솔트, 해시 이름, 반복 횟수 및 CSP(암호화 서비스 공급자) 매개 변수를 사용하여 PasswordDeriveBytes 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the PasswordDeriveBytes class with the password, key salt, hash name, number of iterations, and cryptographic service provider (CSP) parameters to use to derive the key.

속성

HashName

작업에 대한 해시 알고리즘의 이름을 가져오거나 설정합니다.Gets or sets the name of the hash algorithm for the operation.

IterationCount

작업의 반복 횟수를 가져오거나 설정합니다.Gets or sets the number of iterations for the operation.

Salt

작업의 키 솔트 값을 가져오거나 설정합니다.Gets or sets the key salt value for the operation.

메서드

CryptDeriveKey(String, String, Int32, Byte[])

PasswordDeriveBytes 개체에서 암호화 키를 파생시킵니다.Derives a cryptographic key from the PasswordDeriveBytes object.

Dispose()

파생 클래스에서 재정의되는 경우 DeriveBytes 클래스의 현재 인스턴스에서 사용하는 리소스를 모두 해제합니다.When overridden in a derived class, releases all resources used by the current instance of the DeriveBytes class.

(다음에서 상속됨 DeriveBytes)
Dispose(Boolean)

PasswordDeriveBytes 클래스에 사용되는 관리되지 않는 리소스를 해제하고, 필요에 따라 관리되는 리소스를 해제합니다.Releases the unmanaged resources used by the PasswordDeriveBytes class and optionally releases the managed resources.

Equals(Object)

지정한 개체와 현재 개체가 같은지 여부를 확인합니다.Determines whether the specified object is equal to the current object.

(다음에서 상속됨 Object)
Finalize()

가비지 컬렉션이 회수하기 전에 개체가 리소스를 해제하고 다른 정리 작업을 수행할 수 있게 합니다.Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.

GetBytes(Int32)

의사(pseudo) 무작위 키 바이트를 반환합니다.Returns pseudo-random key bytes.

GetHashCode()

기본 해시 함수로 작동합니다.Serves as the default hash function.

(다음에서 상속됨 Object)
GetType()

현재 인스턴스의 Type을 가져옵니다.Gets the Type of the current instance.

(다음에서 상속됨 Object)
MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object.

(다음에서 상속됨 Object)
Reset()

작업의 상태를 다시 설정합니다.Resets the state of the operation.

ToString()

현재 개체를 나타내는 문자열을 반환합니다.Returns a string that represents the current object.

(다음에서 상속됨 Object)

적용 대상

추가 정보