Condividi tramite


CryptographicEngine.Encrypt(CryptographicKey, IBuffer, IBuffer) Metodo

Definizione

Crittografa i dati usando un algoritmo simmetrico o asimmetrico.

public:
 static IBuffer ^ Encrypt(CryptographicKey ^ key, IBuffer ^ data, IBuffer ^ iv);
 static IBuffer Encrypt(CryptographicKey const& key, IBuffer const& data, IBuffer const& iv);
public static IBuffer Encrypt(CryptographicKey key, IBuffer data, IBuffer iv);
function encrypt(key, data, iv)
Public Shared Function Encrypt (key As CryptographicKey, data As IBuffer, iv As IBuffer) As IBuffer

Parametri

key
CryptographicKey

Chiave crittografica da usare per la crittografia. Può trattarsi di una chiave asimmetrica o simmetrica. Per altre informazioni, vedere AsymmetricKeyAlgorithmProvider e SymmetricKeyAlgorithmProvider.

data
IBuffer

Dati da crittografare.

iv
IBuffer

Buffer contenente il vettore di inizializzazione. Può essere Null per un algoritmo simmetrico e deve essere sempre Null per un algoritmo asimmetrico. Se è stato usato un vettore di inizializzazione (IV) per crittografare i dati, è necessario usare lo stesso IV per decrittografare i dati. È possibile utilizzare il metodo GenerateRandom per creare un IV contenente dati casuali. Altri IV, ad esempio vettori generati da nonce, richiedono un'implementazione personalizzata. Per altre informazioni, vedere Chiavi crittografiche.

Gli algoritmi della modalità di crittografia a blocchi in blocchi (CBC) richiedono un vettore di inizializzazione. Per altre informazioni, vedere la sezione Osservazioni.

Restituisce

Dati crittografati.

Esempio

public IBuffer SampleCipherEncryption(
    String strMsg,
    String strAlgName,
    UInt32 keyLength,
    out BinaryStringEncoding encoding,
    out IBuffer iv,
    out CryptographicKey key)
{
    // Initialize the initialization vector.
    iv = null;

    // Initialize the binary encoding value.
    encoding = BinaryStringEncoding.Utf8;

    // Create a buffer that contains the encoded message to be encrypted. 
    IBuffer buffMsg = CryptographicBuffer.ConvertStringToBinary(strMsg, encoding);

    // Open a symmetric algorithm provider for the specified algorithm. 
    SymmetricKeyAlgorithmProvider objAlg = SymmetricKeyAlgorithmProvider.OpenAlgorithm(strAlgName);

    // Determine whether the message length is a multiple of the block length.
    // This is not necessary for PKCS #7 algorithms which automatically pad the
    // message to an appropriate length.
    if (!strAlgName.Contains("PKCS7"))
    {
        if ((buffMsg.Length % objAlg.BlockLength) != 0)
        {
            throw new Exception("Message buffer length must be multiple of block length.");
        }
    }

    // Create a symmetric key.
    IBuffer keyMaterial = CryptographicBuffer.GenerateRandom(keyLength);
    key = objAlg.CreateSymmetricKey(keyMaterial);

    // CBC algorithms require an initialization vector. Here, a random
    // number is used for the vector.
    if (strAlgName.Contains("CBC"))
    {
        iv = CryptographicBuffer.GenerateRandom(objAlg.BlockLength);
    }

    // Encrypt the data and return.
    IBuffer buffEncrypt = CryptographicEngine.Encrypt(key, buffMsg, iv);
    return buffEncrypt;
}

Commenti

Degli algoritmi simmetrici supportati da Microsoft, i seguenti richiedono un vettore di inizializzazione:

Si applica a

Vedi anche