Postupy: Uložení asymetrického klíče v kontejneru klíčů
Asymetrické soukromé klíče by nikdy neměly být uloženy doslovně nebo ve formátu prostého textu v místním počítači. Pokud potřebujete uložit privátní klíč, měli byste použít kontejner klíčů. Další informace o kontejnerech klíčů naleznete v Seznámení s kontejnery klíčů RSA na úrovni počítače a na úrovni uživatele.
Pro vytvoření asymetrického klíče a jeho uložení v kontejneru klíčů udělejte následující
Vytvořte novou instanci třídy CspParameters a položce CspParameters.KeyContainerName předejte název pro kontejner klíčů.
Vytvořte novou instanci třídy, která je odvozena z třídy AsymmetricAlgorithm (obvykle RSACryptoServiceProvider nebo DSACryptoServiceProvider) a jeho konstruktoru předejte již dříve vytvořený objekt CspParameters.
Pokud chcete odstranit klíč z kontejneru klíčů
Vytvořte novou instanci třídy CspParameters a položce CspParameters.KeyContainerName předejte název pro kontejner klíčů.
Vytvořte novou instanci třídy, která je odvozena z třídy AsymmetricAlgorithm (obvykle RSACryptoServiceProvider nebo DSACryptoServiceProvider) a jeho konstruktoru předejte již dříve vytvořený objekt CspParameters.
Nastavte vlastnost PersistKeyInCSP, která náleží třídě odvozené z AsymmetricAlgorithm na hodnotu false (False v jazyce Visual Basic).
Zavolejte metodu Clear, která náleží třídě odvozené z AsymmetricAlgorithm. Tato metoda uvolní všechny prostředky třídy a vyčistí kontejner klíčů.
Příklad
Následující příklad ukazuje, jak vytvořit asymetrický klíč, uložit ho do kontejneru klíčů, jeho pozdější získání a odstranění klíče z kontejneru.
Všimněte si, že kód metody GenKey_SaveInContainer a metody GetKeyFromContainer je podobný. Když specifikujete název kontejneru klíčů u objektu CspParameters a předáváte ho objektu AsymmetricAlgorithm s vlastností PersistKeyInCsp nebo s vlastností PersistKeyInCsp nastavenou na hodnotu true, stane se následující. Pokud kontejner klíčů se zadaným názvem neexistuje, pak je jeden vytvořen a klíč je uchován. Pokud kontejner klíčů se zadaným názvem existuje, pak klíč v kontejneru je automaticky načten do aktuálního objektu AsymmetricAlgorithm. Proto kód v metodě GenKey_SaveInContainer uchovává klíč, protože je spuštěn jako první, zatímco kód v metodě GetKeyFromContainer načítá klíč, protože je spuštěn jako druhý.
Imports System
Imports System.IO
Imports System.Security.Cryptography
_
Public Class StoreKey
Public Shared Sub Main()
Try
' Create a key and save it in a container.
GenKey_SaveInContainer("MyKeyContainer")
' Retrieve the key from the container.
GetKeyFromContainer("MyKeyContainer")
' Delete the key from the container.
DeleteKeyFromContainer("MyKeyContainer")
' Create a key and save it in a container.
GenKey_SaveInContainer("MyKeyContainer")
' Delete the key from the container.
DeleteKeyFromContainer("MyKeyContainer")
Catch e As CryptographicException
Console.WriteLine(e.Message)
End Try
End Sub
Public Shared Sub GenKey_SaveInContainer(ByVal ContainerName As String)
' Create the CspParameters object and set the key container
' name used to store the RSA key pair.
Dim cp As New CspParameters()
cp.KeyContainerName = ContainerName
' Create a new instance of RSACryptoServiceProvider that accesses
' the key container MyKeyContainerName.
Dim rsa As New RSACryptoServiceProvider(cp)
' Display the key information to the console.
Console.WriteLine("Key added to container: {0}", rsa.ToXmlString(True))
End Sub
Public Shared Sub GetKeyFromContainer(ByVal ContainerName As String)
' Create the CspParameters object and set the key container
' name used to store the RSA key pair.
Dim cp As New CspParameters()
cp.KeyContainerName = ContainerName
' Create a new instance of RSACryptoServiceProvider that accesses
' the key container MyKeyContainerName.
Dim rsa As New RSACryptoServiceProvider(cp)
' Display the key information to the console.
Console.WriteLine("Key retrieved from container : {0}", rsa.ToXmlString(True))
End Sub
Public Shared Sub DeleteKeyFromContainer(ByVal ContainerName As String)
' Create the CspParameters object and set the key container
' name used to store the RSA key pair.
Dim cp As New CspParameters()
cp.KeyContainerName = ContainerName
' Create a new instance of RSACryptoServiceProvider that accesses
' the key container.
Dim rsa As New RSACryptoServiceProvider(cp)
' Delete the key entry in the container.
rsa.PersistKeyInCsp = False
' Call Clear to release resources and delete the key from the container.
rsa.Clear()
Console.WriteLine("Key deleted.")
End Sub
End Class
using System;
using System.IO;
using System.Security.Cryptography;
public class StoreKey
{
public static void Main()
{
try
{
// Create a key and save it in a container.
GenKey_SaveInContainer("MyKeyContainer");
// Retrieve the key from the container.
GetKeyFromContainer("MyKeyContainer");
// Delete the key from the container.
DeleteKeyFromContainer("MyKeyContainer");
// Create a key and save it in a container.
GenKey_SaveInContainer("MyKeyContainer");
// Delete the key from the container.
DeleteKeyFromContainer("MyKeyContainer");
}
catch(CryptographicException e)
{
Console.WriteLine(e.Message);
}
}
public static void GenKey_SaveInContainer(string ContainerName)
{
// Create the CspParameters object and set the key container
// name used to store the RSA key pair.
CspParameters cp = new CspParameters();
cp.KeyContainerName = ContainerName;
// Create a new instance of RSACryptoServiceProvider that accesses
// the key container MyKeyContainerName.
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cp);
// Display the key information to the console.
Console.WriteLine("Key added to container: \n {0}", rsa.ToXmlString(true));
}
public static void GetKeyFromContainer(string ContainerName)
{
// Create the CspParameters object and set the key container
// name used to store the RSA key pair.
CspParameters cp = new CspParameters();
cp.KeyContainerName = ContainerName;
// Create a new instance of RSACryptoServiceProvider that accesses
// the key container MyKeyContainerName.
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cp);
// Display the key information to the console.
Console.WriteLine("Key retrieved from container : \n {0}", rsa.ToXmlString(true));
}
public static void DeleteKeyFromContainer(string ContainerName)
{
// Create the CspParameters object and set the key container
// name used to store the RSA key pair.
CspParameters cp = new CspParameters();
cp.KeyContainerName = ContainerName;
// Create a new instance of RSACryptoServiceProvider that accesses
// the key container.
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cp);
// Delete the key entry in the container.
rsa.PersistKeyInCsp = false;
// Call Clear to release resources and delete the key from the container.
rsa.Clear();
Console.WriteLine("Key deleted.");
}
}
Viz také
Koncepty
Generování klíčů pro šifrování a dešifrování