Informationen zum speichern eines öffentlichen Schlüssels zu einer Maschine-level-RSA-Schlüsselcontainer
Ich habe da ein problem mit einer Maschine-level-RSA key container, wenn die Speicherung nur der öffentliche Schlüssel eines public - /private key pair.
Der folgende code erstellt ein public/private-pair-Mädchen und extrahiert den öffentlichen Schlüssel aus, die paar. Das paar und der öffentliche Schlüssel gespeichert werden, in separaten Schlüssel Container. Die Schlüssel werden anschließend die von den key-Container, an welcher Stelle Sie sollten die gleichen sein, wie die keys gehen in den Container.
Der code funktioniert, wenn CspProviderFlags.UseDefaultKeyContainer
angegeben ist für CspParameters.Flags
(D. H. den Schlüssel wieder ausgelesen aus der PublicKey container ist das gleiche), aber wenn CspProviderFlags.UseMachineKeyStore
angegeben ist für CspParameters.Flags
den Schlüssel wieder zu Lesen von PublicKey ist anders.
Warum ist das Verhalten Verschieden, und was muss ich anders machen, um die öffentlichen Schlüssel von einer Maschine-level-RSA key container?
var publicPrivateRsa = new RSACryptoServiceProvider(new CspParameters()
{
KeyContainerName = "PublicPrivateKey",
Flags = CspProviderFlags.UseMachineKeyStore
//Flags = CspProviderFlags.UseDefaultKeyContainer
}
)
{
PersistKeyInCsp = true,
};
var publicRsa = new RSACryptoServiceProvider(new CspParameters()
{
KeyContainerName = "PublicKey",
Flags = CspProviderFlags.UseMachineKeyStore
//Flags = CspProviderFlags.UseDefaultKeyContainer
}
)
{
PersistKeyInCsp = true
};
//Export the key.
publicRsa.ImportParameters(publicPrivateRsa.ExportParameters(false));
Console.WriteLine(publicRsa.ToXmlString(false));
Console.WriteLine(publicPrivateRsa.ToXmlString(false));
//Dispose those two CSPs.
using (publicRsa)
{
publicRsa.Clear();
}
using (publicPrivateRsa)
{
publicRsa.Clear();
}
publicPrivateRsa = new RSACryptoServiceProvider(new CspParameters()
{
KeyContainerName = "PublicPrivateKey",
Flags = CspProviderFlags.UseMachineKeyStore
//Flags = CspProviderFlags.UseDefaultKeyContainer
}
);
publicRsa = new RSACryptoServiceProvider(new CspParameters()
{
KeyContainerName = "PublicKey",
Flags = CspProviderFlags.UseMachineKeyStore
//Flags = CspProviderFlags.UseDefaultKeyContainer
}
);
Console.WriteLine(publicRsa.ToXmlString(false));
Console.WriteLine(publicPrivateRsa.ToXmlString(false));
using (publicRsa)
{
publicRsa.Clear();
}
using (publicPrivateRsa)
{
publicRsa.Clear();
}
- Eine Diskussion über diese Frage findet Ihr auf MSDN (social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/...)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheint es, dass key-Behälter sind nicht für diesen Zweck bestimmt (dies wird impliziert durch "gewusst Wie: Speichern der Asymmetrischen Schlüssel in Key-Container" aus .NET Framework Developer ' s Guide und bestätigt durch ein disccusion auf der MSDN-Website).
Andere Mechanismen, wie die Speicherung der Schlüssel in einer XML-Datei, die benutzt werden müssen, um dieses Ziel zu erreichen.
Dieser link kann Ihnen helfen. http://msdn.microsoft.com/en-IN/library/tswxhw92(v=vs. 80).aspx
Dies ist, was es sagt über Taste löschen.