RSACryptoServiceProvider.UseMachineKeyStore 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取或设置一个值,该值指示是否应在计算机的密钥存储而不是用户配置文件存储中保留密钥。
public:
static property bool UseMachineKeyStore { bool get(); void set(bool value); };
public static bool UseMachineKeyStore { get; set; }
static member UseMachineKeyStore : bool with get, set
Public Shared Property UseMachineKeyStore As Boolean
属性值
如果应在计算机密钥存储中保留密钥,则为 true
;否则为 false
。
示例
下面的代码示例创建一个 RSACryptoServiceProvider 对象,并将静态 UseMachineKeyStore 属性设置为使用计算机密钥存储而不是用户配置文件密钥存储。
using namespace System;
using namespace System::Security::Cryptography;
ref class RSAKeyStoreSample
{
public:
static void Main()
{
// Set the static UseMachineKeyStore property to use the machine key
// store instead of the user profile key store. All CSP instances not
// initialized with CspParameters will use this setting.
RSACryptoServiceProvider::UseMachineKeyStore = true;
try
{
RSACryptoServiceProvider^ RSAalg;
// This CSP instance will use the Machine Store as set above and is
// initialized with no parameters.
RSAalg = gcnew RSACryptoServiceProvider();
ShowContainerInfo(RSAalg->CspKeyContainerInfo);
RSAalg->PersistKeyInCsp = false;
delete RSAalg;
CspParameters^ cspParams = gcnew CspParameters();
cspParams->KeyContainerName = "MyKeyContainer";
// This CSP instance will use the User Store since cspParams are used.
RSAalg = gcnew RSACryptoServiceProvider(cspParams);
ShowContainerInfo(RSAalg->CspKeyContainerInfo);
RSAalg->PersistKeyInCsp = false;
delete RSAalg;
cspParams->Flags |= CspProviderFlags::UseMachineKeyStore;
// This CSP instance will use the Machine Store. Although cspParams are used,
// the cspParams.Flags is set to CspProviderFlags.UseMachineKeyStore.
RSAalg = gcnew RSACryptoServiceProvider(cspParams);
ShowContainerInfo(RSAalg->CspKeyContainerInfo);
RSAalg->PersistKeyInCsp = false;
delete RSAalg;
}
catch (CryptographicException^ e)
{
Console::WriteLine("Exception: {0}", e->GetType()->FullName);
Console::WriteLine(e->Message);
}
}
static void ShowContainerInfo(CspKeyContainerInfo^ containerInfo)
{
String^ keyStore;
Console::WriteLine();
if (containerInfo->MachineKeyStore)
{
keyStore = "Machine Store";
}
else
{
keyStore = "User Store";
}
Console::WriteLine("Key Store: {0}", keyStore);
Console::WriteLine("Key Provider: {0}", containerInfo->ProviderName);
Console::WriteLine("Key Container: \"{0}\"", containerInfo->KeyContainerName);
Console::WriteLine("Generated: {0}", containerInfo->RandomlyGenerated);
Console::WriteLine("Key Nubmer: {0}", containerInfo->KeyNumber);
Console::WriteLine("Removable Key: {0}", containerInfo->Removable);
}
};
int main()
{
RSAKeyStoreSample::Main();
}
using System;
using System.Security.Cryptography;
public class RSAKeyStoreSample
{
public static void Main()
{
// Set the static UseMachineKeyStore property to use the machine key
// store instead of the user profile key store. All CSP instances not
// initialized with CspParameters will use this setting.
RSACryptoServiceProvider.UseMachineKeyStore = true;
try
{
// This CSP instance will use the Machine Store as set above and is
// initialized with no parameters.
using (RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider())
{
ShowContainerInfo(RSAalg.CspKeyContainerInfo);
RSAalg.PersistKeyInCsp = false;
}
CspParameters cspParams = new CspParameters();
cspParams.KeyContainerName = "MyKeyContainer";
// This CSP instance will use the User Store since cspParams are used.
using (RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider(cspParams))
{
ShowContainerInfo(RSAalg.CspKeyContainerInfo);
RSAalg.PersistKeyInCsp = false;
}
cspParams.Flags |= CspProviderFlags.UseMachineKeyStore;
// This CSP instance will use the Machine Store. Although cspParams are used,
// the cspParams.Flags is set to CspProviderFlags.UseMachineKeyStore.
using (RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider(cspParams))
{
ShowContainerInfo(RSAalg.CspKeyContainerInfo);
RSAalg.PersistKeyInCsp = false;
}
}
catch (CryptographicException e)
{
Console.WriteLine("Exception: {0}", e.GetType().FullName);
Console.WriteLine(e.Message);
}
}
public static void ShowContainerInfo(CspKeyContainerInfo containerInfo)
{
string keyStore;
Console.WriteLine();
if (containerInfo.MachineKeyStore)
{
keyStore = "Machine Store";
}
else
{
keyStore = "User Store";
}
Console.WriteLine("Key Store: {0}", keyStore);
Console.WriteLine("Key Provider: {0}", containerInfo.ProviderName);
Console.WriteLine("Key Container: \"{0}\"", containerInfo.KeyContainerName);
Console.WriteLine("Generated: {0}", containerInfo.RandomlyGenerated);
Console.WriteLine("Key Nubmer: {0}", containerInfo.KeyNumber);
Console.WriteLine("Removable Key: {0}", containerInfo.Removable);
}
}
Imports System.Security.Cryptography
Public Class RSAKeyStoreSample
Public Shared Sub Main()
' Set the static UseMachineKeyStore property to use the machine key
' store instead of the user profile key store. All CSP instances not
' initialized with CspParameters will use this setting.
RSACryptoServiceProvider.UseMachineKeyStore = True
Try
' This CSP instance will use the Machine Store as set above and is
' initialized with no parameters.
Using RSAalg As New RSACryptoServiceProvider()
ShowContainerInfo(RSAalg.CspKeyContainerInfo)
RSAalg.PersistKeyInCsp = False
End Using
Dim cspParams As New CspParameters()
cspParams.KeyContainerName = "MyKeyContainer"
' This CSP instance will use the User Store since cspParams are used.
Using RSAalg As New RSACryptoServiceProvider(cspParams)
ShowContainerInfo(RSAalg.CspKeyContainerInfo)
RSAalg.PersistKeyInCsp = False
End Using
cspParams.Flags = cspParams.Flags Or CspProviderFlags.UseMachineKeyStore
' This CSP instance will use the Machine Store. Although cspParams are used,
' the cspParams.Flags is set to CspProviderFlags.UseMachineKeyStore.
Using RSAalg As New RSACryptoServiceProvider(cspParams)
ShowContainerInfo(RSAalg.CspKeyContainerInfo)
RSAalg.PersistKeyInCsp = False
End Using
Catch e As CryptographicException
Console.WriteLine("Exception: {0}", e.GetType().FullName)
Console.WriteLine(e.Message)
End Try
End Sub
Public Shared Sub ShowContainerInfo(containerInfo As CspKeyContainerInfo)
Dim keyStore As String
Console.WriteLine()
If containerInfo.MachineKeyStore Then
keyStore = "Machine Store"
Else
keyStore = "User Store"
End If
Console.WriteLine("Key Store: {0}", keyStore)
Console.WriteLine("Key Provider: {0}", containerInfo.ProviderName)
Console.WriteLine("Key Container: ""{0}""", containerInfo.KeyContainerName)
Console.WriteLine("Generated: {0}", containerInfo.RandomlyGenerated)
Console.WriteLine("Key Nubmer: {0}", containerInfo.KeyNumber)
Console.WriteLine("Removable Key: {0}", containerInfo.Removable)
End Sub
End Class
注解
将此属性设置为 true
等效于将 UseMachineKeyStore 标志传递给 CspParameters 对象。 属性 UseMachineKeyStore 适用于当前应用程序域中的所有代码,而 CspParameters 对象仅适用于显式引用它的类。 模拟或运行未加载用户配置文件的帐户时,这些设置非常有用。 仅当未使用参数进行初始化时RSACryptoServiceProvider,设置UseMachineKeyStore才会影响密钥存储位置。