Esporta (0) Stampa
Espandi tutto

Costruttore RSACryptoServiceProvider (Int32, CspParameters)

Inizializza una nuova istanza della classe RSACryptoServiceProvider con le dimensioni e i parametri specificati della chiave.

Spazio dei nomi: System.Security.Cryptography
Assembly: mscorlib (in mscorlib.dll)

public RSACryptoServiceProvider (
	int dwKeySize,
	CspParameters parameters
)
public RSACryptoServiceProvider (
	int dwKeySize, 
	CspParameters parameters
)
public function RSACryptoServiceProvider (
	dwKeySize : int, 
	parameters : CspParameters
)

Parametri

dwKeySize

Dimensione in bit della chiave da utilizzare.

parameters

Parametri da passare al provider del servizio di crittografia (CSP).

Tipo di eccezioneCondizione

CryptographicException

Non è possibile acquisire il provider CSP.

-oppure-

Non è possibile creare la chiave.

Questo costruttore crea o riutilizza un contenitore di chiavi specificato mediante il campo KeyContainerName del parametro parameters.

Per impostazione predefinita, questo costruttore crea una coppia di chiavi Exchange che può essere utilizzata per crittografare le chiavi di sessione affinché possano essere archiviate e scambiate in modo sicuro con altri utenti. La chiave generata corrisponde a una chiave generata mediante il valore AT_KEYEXCHANGE utilizzato nell'interfaccia API di crittografia Microsoft non gestito.

È possibile creare una coppia di chiavi Signature utilizzabile per l'autenticazione di messaggi o di file con firma digitale impostando il campo KeyNumber del parametro parameters sul valore Signature. Questo tipo di chiave corrisponde al valore AT_SIGNATURE utilizzato nell'interfaccia API di crittografia Microsoft.

Se si crea un oggetto RSACryptoServiceProvider con il valore Exchange specificato, quindi si crea un altro oggetto RSACryptoServiceProvider con il valore Signature specificato, entrambe le chiavi saranno inserite in un singolo contenitore se i due oggetti specificano lo stesso nome di contenitore di chiavi.

Per creare una chiave compatibile con la firma con nome sicuro mediante la classe RSACryptoServiceProvider, è necessario creare una coppia di chiavi Signature.

Nell'esempio di codice riportato di seguito viene creato un oggetto RSACryptoServiceProvider, viene generata una nuova coppia di chiavi e viene memorizzata in un contenitore di chiavi.

using System;
using System.Security.Cryptography;
using System.Text;

class RSACSPSample
{

    static void Main()
    {
        try
        {
            string KeyContainerName = "MyKeyContainer";

            //Create a new key and persist it in 
            //the key container.
            RSAPersistKeyInCSP(KeyContainerName);

            //Create a UnicodeEncoder to convert between byte array and string.
            UnicodeEncoding ByteConverter = new UnicodeEncoding();

            //Create byte arrays to hold original, encrypted, and decrypted data.
            byte[] dataToEncrypt = ByteConverter.GetBytes("Data to Encrypt");
            byte[] encryptedData;
            byte[] decryptedData;

            //Pass the data to ENCRYPT, the name of the key container,
            //and a boolean flag specifying no OAEP padding.
            encryptedData = RSAEncrypt(dataToEncrypt,KeyContainerName, false);

            //Pass the data to DECRYPT, the name of the key container,
            //and a boolean flag specifying no OAEP padding.
            decryptedData = RSADecrypt(encryptedData,KeyContainerName, false);

            //Display the decrypted plaintext to the console. 
            Console.WriteLine("Decrypted plaintext: {0}", ByteConverter.GetString(decryptedData));

            RSADeleteKeyInCSP(KeyContainerName);
        }
        catch(ArgumentNullException)
        {
            //Catch this exception in case the encryption did
            //not succeed.
            Console.WriteLine("Encryption failed.");

        }
    }

    public static void RSAPersistKeyInCSP(string ContainerName)
    {
        try
        {
            // Create a new instance of CspParameters.  Pass
            // 13 to specify a DSA container or 1 to specify
            // an RSA container.  The default is 1.
            CspParameters cspParams = new CspParameters();

            // Specify the container name using the passed variable.
            cspParams.KeyContainerName = ContainerName;

            //Create a new instance of RSACryptoServiceProvider to generate
            //a new key pair.  Pass the CspParameters class to persist the 
            //key in the container.  Pass an intger of 2048 to specify the 
            //key-size.
            RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider( 2048, cspParams);

            //Indicate that the key was persisted.
            Console.WriteLine("The RSA key with a key-size of {0} was persisted in the container, \"{1}\".", 
                              RSAalg.KeySize , ContainerName);
        }
        catch(CryptographicException e)
        {
            Console.WriteLine(e.Message);

        }
    }

    public static void RSADeleteKeyInCSP(string ContainerName)
    {
        try
        {
            // Create a new instance of CspParameters.  Pass
            // 13 to specify a DSA container or 1 to specify
            // an RSA container.  The default is 1.
            CspParameters cspParams = new CspParameters();

            // Specify the container name using the passed variable.
            cspParams.KeyContainerName = ContainerName;

            //Create a new instance of DSACryptoServiceProvider. 
            //Pass the CspParameters class to use the 
            //key in the container.
            RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider(cspParams);

            //Delete the key entry in the container.
            RSAalg.PersistKeyInCsp = false;

            //Call Clear to release resources and delete the key from the container.
            RSAalg.Clear();

            //Indicate that the key was persisted.
            Console.WriteLine("The RSA key was deleted from the container, \"{0}\".", ContainerName);
        }
        catch(CryptographicException e)
        {
            Console.WriteLine(e.Message);

        }
    }

    static public byte[] RSAEncrypt(byte[] DataToEncrypt, string ContainerName, bool DoOAEPPadding)
    {
        try
        {	
            // Create a new instance of CspParameters.  Pass
            // 13 to specify a DSA container or 1 to specify
            // an RSA container.  The default is 1.
            CspParameters cspParams = new CspParameters();

            // Specify the container name using the passed variable.
            cspParams.KeyContainerName = ContainerName;

            //Create a new instance of DSACryptoServiceProvider.
            //Pass the CspParameters class to use the key 
            //from the key in the container.
            RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider(cspParams);

            //Encrypt the passed byte array and specify OAEP padding.  
            //OAEP padding is only available on Microsoft Windows XP or
            //later.  
            return RSAalg.Encrypt(DataToEncrypt, DoOAEPPadding);
        }
            //Catch and display a CryptographicException  
            //to the console.
        catch(CryptographicException e)
        {
            Console.WriteLine(e.Message);

            return null;
        }

    }

    static public byte[] RSADecrypt(byte[] DataToDecrypt, string ContainerName, bool DoOAEPPadding)
    {
        try
        {
            // Create a new instance of CspParameters.  Pass
            // 13 to specify a DSA container or 1 to specify
            // an RSA container.  The default is 1.
            CspParameters cspParams = new CspParameters();

            // Specify the container name using the passed variable.
            cspParams.KeyContainerName = ContainerName;

            //Create a new instance of DSACryptoServiceProvider.
            //Pass the CspParameters class to use the key 
            //from the key in the container.
            RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider(cspParams);

            //Decrypt the passed byte array and specify OAEP padding.  
            //OAEP padding is only available on Microsoft Windows XP or
            //later.  
            return RSAalg.Decrypt(DataToDecrypt, DoOAEPPadding);
        }
            //Catch and display a CryptographicException  
            //to the console.
        catch(CryptographicException e)
        {
            Console.WriteLine(e.ToString());

            return null;
        }

    }
}

import System.*;
import System.Security.Cryptography.*;
import System.Text.*;

class RSACSPSample
{
    public static void main(String[] args)
    {
        try {
            String keyContainerName = "MyKeyContainer";

            // Create a new key and persist it in 
            // the key container.
            RSAPersistKeyInCSP(keyContainerName);

            // Create a UnicodeEncoder to convert between byte array and string.
            UnicodeEncoding byteConverter = new UnicodeEncoding();

            // Create byte arrays to hold original, encrypted, and decrypted 
            // data.
            ubyte dataToEncrypt[] = byteConverter.GetBytes("Data to Encrypt");
            ubyte encryptedData[];
            ubyte decryptedData[];

            // Pass the data to ENCRYPT, the name of the key container,
            // and a boolean flag specifying no OAEP padding.
            encryptedData = RSAEncrypt(dataToEncrypt, keyContainerName, false);

            // Pass the data to DECRYPT, the name of the key container,
            // and a boolean flag specifying no OAEP padding.
            decryptedData = RSADecrypt(encryptedData, keyContainerName, false);

            // Display the decrypted plaintext to the console. 
            Console.WriteLine("Decrypted plaintext: {0}", 
                byteConverter.GetString(decryptedData));
            RSADeleteKeyInCSP(keyContainerName);
        }
        catch (ArgumentNullException exp) {
            // Catch this exception in case the encryption did
            // not succeed.
            Console.WriteLine("Encryption failed.");
        }
    } //main

    public static void RSAPersistKeyInCSP(String containerName)
    {
        try {
            // Create a new instance of CspParameters.  Pass
            // 13 to specify a DSA container or 1 to specify
            // an RSA container.  The default is 1.
            CspParameters cspParams = new CspParameters();

            // Specify the container name using the passed variable.
            cspParams.KeyContainerName = containerName;

            // Create a new instance of RSACryptoServiceProvider to generate
            // a new key pair.  Pass the CspParameters class to persist the 
            // key in the container.  Pass an intger of 2048 to specify the 
            // key-size.
            RSACryptoServiceProvider rsaAlg = 
                new RSACryptoServiceProvider(2048, cspParams);

            // Indicate that the key was persisted.
            Console.WriteLine("The RSA key with a key-size of {0} was "
                + "persisted in the container, \"{1}\".", 
                System.Convert.ToString(rsaAlg.get_KeySize()), containerName);
        }
        catch (CryptographicException e) {
            Console.WriteLine(e.get_Message());
        }
    } //RSAPersistKeyInCSP

    public static void RSADeleteKeyInCSP(String containerName)
    {
        try {
            // Create a new instance of CspParameters.  Pass
            // 13 to specify a DSA container or 1 to specify
            // an RSA container.  The default is 1.
            CspParameters cspParams = new CspParameters();

            // Specify the container name using the passed variable.
            cspParams.KeyContainerName = containerName;

            // Create a new instance of DSACryptoServiceProvider. 
            // Pass the CspParameters class to use the 
            // key in the container.
            RSACryptoServiceProvider rsaAlg = 
                new RSACryptoServiceProvider(cspParams);

            // Delete the key entry in the container.
            rsaAlg.set_PersistKeyInCsp(false);

            // Call Clear to release resources and delete the key from 
            // the container.
            rsaAlg.Clear();

            // Indicate that the key was persisted.
            Console.WriteLine("The RSA key was deleted from the container, "
                + "\"{0}\".", containerName);
        }
        catch (CryptographicException e) {
            Console.WriteLine(e.get_Message());
        }
    } //RSADeleteKeyInCSP

    public static ubyte[] RSAEncrypt(ubyte dataToEncrypt[], 
        String containerName, boolean doOAEPPadding)
    {
        try {
            // Create a new instance of CspParameters.  Pass
            // 13 to specify a DSA container or 1 to specify
            // an RSA container.  The default is 1.
            CspParameters cspParams = new CspParameters();

            // Specify the container name using the passed variable.
            cspParams.KeyContainerName = containerName;

            // Create a new instance of DSACryptoServiceProvider.
            // Pass the CspParameters class to use the key 
            // from the key in the container.
            RSACryptoServiceProvider rsaAlg = 
                new RSACryptoServiceProvider(cspParams);

            // Encrypt the passed byte array and specify OAEP padding.  
            // OAEP padding is only available on Microsoft Windows XP or
            // later.  
            return rsaAlg.Encrypt(dataToEncrypt, doOAEPPadding);
        }
        // Catch and display a CryptographicException  
        // to the console.
        catch (CryptographicException e) {
            Console.WriteLine(e.get_Message());
            return null;
        }
    } //RSAEncrypt

    public static ubyte[] RSADecrypt(ubyte[] dataToDecrypt, 
        String containerName, boolean doOAEPPadding)
    {
        try {
            // Create a new instance of CspParameters.  Pass
            // 13 to specify a DSA container or 1 to specify
            // an RSA container.  The default is 1.
            CspParameters cspParams = new CspParameters();

            // Specify the container name using the passed variable.
            cspParams.KeyContainerName = containerName;

            // Create a new instance of DSACryptoServiceProvider.
            // Pass the CspParameters class to use the key 
            // from the key in the container.
            RSACryptoServiceProvider rsaAlg = 
                new RSACryptoServiceProvider(cspParams);

            // Decrypt the passed byte array and specify OAEP padding.  
            // OAEP padding is only available on Microsoft Windows XP or
            // later.  
            return rsaAlg.Decrypt(dataToDecrypt, doOAEPPadding);
        }
        // Catch and display a CryptographicException  
        // to the console.
        catch (CryptographicException e) {
            Console.WriteLine(e.ToString());
            return null;
        }
    } //RSADecrypt
} //RSACSPSample

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile per Pocket PC, Windows Mobile per Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema.

.NET Framework

Supportato in: 2.0 1.1 1.0

.NET Compact Framework

Supportato in: 2.0

Aggiunte alla community

AGGIUNGI
Mostra:
© 2015 Microsoft