[This documentation is preliminary and is subject to change.]
Applies to: Metro style apps | desktop apps
Represents parameters used when deriving a key.
Syntax
var keyDerivationParameters = Windows.Security.Cryptography.Core.KeyDerivationParameters;
Attributes
- DualApiPartitionAttribute()
- MarshalingBehaviorAttribute(Agile)
- StaticAttribute(Windows.Security.Cryptography.Core.IKeyDerivationParametersStatics, NTDDI_WIN8)
- ThreadingAttribute(Both)
- VersionAttribute(NTDDI_WIN8)
Members
The KeyDerivationParameters class has these types of members:
Methods
The KeyDerivationParameters class has these methods. With C#, Visual Basic, and C++, it also inherits methods from the Object class.
| Method | Description |
|---|---|
| BuildForPbkdf2 | Creates a KeyDerivationParameters object for use in the password-based key derivation function 2 (PBKDF2). |
| BuildForSP800108 | Creates a KeyDerivationParameters object for use in a counter mode, hash-based message authentication code (HMAC) key derivation function. |
| BuildForSP80056a | Creates a KeyDerivationParameters object for use in the SP800-56A key derivation function. |
Properties
The KeyDerivationParameters class has these properties.
| Property | Access type | Description |
|---|---|---|
| Read-only | Retrieves the number of iterations used to derive the key. | |
| Read/write | Gets or sets the parameters used by the key derivation algorithm. |
Remarks
You do not have to create an instance of the class to use the methods. Instead, use the class name followed by the dot operator (.), followed by the method name.
Examples
using Windows.Security.Cryptography;
using Windows.Security.Cryptography.Core;
using Windows.Storage.Streams;
namespace SampleKeyDerivationAlgorithm
{
sealed partial class SampleKeyDerivationProviderApp : Application
{
public SampleKeyDerivationProviderApp()
{
// Initialize the Application.
this.InitializeComponent();
// Derive key material from a password-based key derivation function.
String strKdfAlgName = "PBKDF2_SHA256";
UInt32 targetKeySize = 32;
UInt32 iterationCount = 10000;
IBuffer buffKeyMatl = this.SampleDeriveKeyMaterialPbkdf(
strKdfAlgName,
targetKeySize,
iterationCount);
// Create a key.
CryptographicKey key = this.SampleCreateKDFKey(
strKdfAlgName,
buffKeyMatl);
}
public IBuffer SampleDeriveKeyMaterialPbkdf(
String strAlgName,
UInt32 targetKeySize,
UInt32 iterationCount)
{
// Open the specified algorithm.
KeyDerivationAlgorithmProvider objKdfProv = KeyDerivationAlgorithmProvider.OpenAlgorithm(strAlgName);
// Demonstrate how to retrieve the algorithm name.
String strAlgUsed = objKdfProv.AlgorithmName;
// Create a buffer that contains the secret used during derivation.
String strSecret = "MyPassword";
IBuffer buffSecret = CryptographicBuffer.ConvertStringToBinary(strSecret, BinaryStringEncoding.Utf8);
// Create a random salt value.
IBuffer buffSalt = CryptographicBuffer.GenerateRandom(32);
// Create the derivation parameters.
KeyDerivationParameters pbkdf2Params = KeyDerivationParameters.BuildForPbkdf2(buffSalt, iterationCount);
// Create a key from the secret value.
CryptographicKey keyOriginal = objKdfProv.CreateKey(buffSecret);
// Derive a key based on the original key and the derivation parameters.
IBuffer keyMaterial = CryptographicEngine.DeriveKeyMaterial(
keyOriginal,
pbkdf2Params,
targetKeySize);
// Demonstrate checking the iteration count.
UInt32 iterationCountOut = pbkdf2Params.IterationCount;
// Demonstrate returning the derivation parameters to a buffer.
IBuffer buffParams = pbkdf2Params.KdfGenericBinary;
// return the KDF key material.
return keyMaterial;
}
public CryptographicKey SampleCreateKDFKey(
String strAlgName,
IBuffer buffKeyMaterial)
{
// Create a KeyDerivationAlgorithmProvider object and open the specified algorithm.
KeyDerivationAlgorithmProvider objKdfAlgProv = KeyDerivationAlgorithmProvider.OpenAlgorithm(strAlgName);
// Create a key by using the KDF parameters.
CryptographicKey key = objKdfAlgProv.CreateKey(buffKeyMaterial);
return key;
}
}
}
Requirements
|
Minimum supported client | Windows 8 Release Preview |
|---|---|
|
Minimum supported server | Windows Server 2012 |
|
Namespace |
|
|
Metadata |
|
See also
Build date: 5/22/2012
