PasswordDeriveBytes クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
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
- 継承
- 属性
例
次のコード例では、 クラスを使用してパスワードからキーを PasswordDeriveBytes 作成します。
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.
// This example uses the SHA1 algorithm.
// Due to collision problems with SHA1, Microsoft recommends SHA256 or better.
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.
// 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];
}
// 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.
' 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 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 アルゴリズムの拡張機能を使用して、パスワードからキー マテリアルとして使用するのに適したバイトを派生させます。 この標準は IETF RRC 2898 に記載されています。
重要
ソース コード内でパスワードをハードコーディングしないでください。 ハード コーディングされたパスワードは、 Ildasm.exe (IL 逆アセンブラー) ツール、16 進エディター、または単に notepad.exe などのテキスト エディターでアセンブリを開くだけで、アセンブリから取得できます。
コンストラクター
PasswordDeriveBytes(Byte[], Byte[]) |
キーを派生させるために使用するパスワードおよびキー salt を指定して、PasswordDeriveBytes クラスの新しいインスタンスを初期化します。 |
PasswordDeriveBytes(Byte[], Byte[], CspParameters) |
キーを派生させるために使用するパスワード、キー salt、および暗号化サービス プロバイダー (CSP: Cryptographic Service Provider) を指定して、PasswordDeriveBytes クラスの新しいインスタンスを初期化します。 |
PasswordDeriveBytes(Byte[], Byte[], String, Int32) |
キーを派生させるために使用するパスワード、キー salt、ハッシュ名、および反復処理回数を指定して、PasswordDeriveBytes クラスの新しいインスタンスを初期化します。 |
PasswordDeriveBytes(Byte[], Byte[], String, Int32, CspParameters) |
キーを派生させるために使用するパスワード、キー salt、ハッシュ名、反復処理回数、および暗号化サービス プロバイダー (CSP: Cryptographic Service Provider) を指定して、PasswordDeriveBytes クラスの新しいインスタンスを初期化します。 |
PasswordDeriveBytes(String, Byte[]) |
キーを派生させるために使用するパスワードおよびキー salt を指定して、PasswordDeriveBytes クラスの新しいインスタンスを初期化します。 |
PasswordDeriveBytes(String, Byte[], CspParameters) |
キーを派生させるために使用するパスワード、キー salt、および暗号サービス プロバイダー (CSP : Cryptographic Service Provider) の各パラメーターを指定して、PasswordDeriveBytes クラスの新しいインスタンスを初期化します。 |
PasswordDeriveBytes(String, Byte[], String, Int32) |
キーを派生させるために使用するパスワード、キー salt、ハッシュ名、および反復処理の回数を指定して、PasswordDeriveBytes クラスの新しいインスタンスを初期化します。 |
PasswordDeriveBytes(String, Byte[], String, Int32, CspParameters) |
キーを派生するために使用するパスワード、キー salt、ハッシュ名、反復処理の回数、および暗号サービス プロバイダー (CSP) の各パラメーターを指定して、PasswordDeriveBytes クラスの新しいインスタンスを初期化します。 |
プロパティ
HashName |
演算で使用するハッシュ アルゴリズムの名前を取得または設定します。 |
IterationCount |
演算の反復処理回数を取得または設定します。 |
Salt |
演算で使用するキー salt 値を取得または設定します。 |
メソッド
CryptDeriveKey(String, String, Int32, Byte[]) |
PasswordDeriveBytes オブジェクトから暗号キーを派生させます。 |
Dispose() |
派生クラスでオーバーライドされると、DeriveBytes クラスの現在のインスタンスによって使用されているすべてのリソースを解放します。 (継承元 DeriveBytes) |
Dispose(Boolean) |
PasswordDeriveBytes クラスによって使用されているアンマネージド リソースを解放し、オプションでマネージド リソースも解放します。 |
Dispose(Boolean) |
派生クラスでオーバーライドされた場合、DeriveBytes クラスによって使用されているアンマネージド リソースを解放します。オプションとして、マネージド リソースを解放することもできます。 (継承元 DeriveBytes) |
Equals(Object) |
指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。 (継承元 Object) |
Finalize() |
オブジェクトが、ガベージ コレクションによって収集される前に、リソースの解放とその他のクリーンアップ操作の実行を試みることができるようにします。 |
GetBytes(Int32) |
古い.
擬似ランダム キー バイトを返します。 |
GetHashCode() |
既定のハッシュ関数として機能します。 (継承元 Object) |
GetType() |
現在のインスタンスの Type を取得します。 (継承元 Object) |
MemberwiseClone() |
現在の Object の簡易コピーを作成します。 (継承元 Object) |
Reset() |
演算の状態をリセットします。 |
ToString() |
現在のオブジェクトを表す文字列を返します。 (継承元 Object) |
適用対象
こちらもご覧ください
.NET