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();
}
Schreibe einen Kommentar