CryptographicEngine.Encrypt(CryptographicKey, IBuffer, IBuffer) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Verschlüsselt Daten mithilfe eines symmetrischen oder asymmetrischen Algorithmus.
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
Parameter
- key
- CryptographicKey
Kryptografischer Schlüssel, der für die Verschlüsselung verwendet werden soll. Dies kann ein asymmetrischer oder ein symmetrischer Schlüssel sein. Weitere Informationen finden Sie unter AsymmetricKeyAlgorithmProvider und SymmetricKeyAlgorithmProvider.
- data
- IBuffer
Zu verschlüsselnde Daten.
- iv
- IBuffer
Puffer, der den Initialisierungsvektor enthält. Dies kann null für einen symmetrischen Algorithmus sein und sollte für einen asymmetrischen Algorithmus immer NULL sein. Wenn zum Verschlüsseln der Daten ein Initialisierungsvektor (IV) verwendet wurde, müssen Sie denselben IV verwenden, um die Daten zu entschlüsseln. Sie können die GenerateRandom-Methode verwenden, um eine IV zu erstellen, die zufällige Daten enthält. Andere IVs, z. B. nonce-generierte Vektoren, erfordern eine benutzerdefinierte Implementierung. Weitere Informationen finden Sie unter Kryptografische Schlüssel.
Verschlüsselungsblockkettenalgorithmen (Cipher Block Chaining, CBC) erfordern einen Initialisierungsvektor. Weitere Informationen finden Sie in den Hinweisen.
Gibt zurück
Verschlüsselte Daten.
Beispiele
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;
}
Hinweise
Für die von Microsoft unterstützten symmetrischen Algorithmen ist ein Initialisierungsvektor erforderlich:
- SymmetricAlgorithmNames.DesCbc
- SymmetricAlgorithmNames.TripleDesCbc
- SymmetricAlgorithmNames.Rc2Cbc
- SymmetricAlgorithmNames.AesCbc
- SymmetricAlgorithmNames.AesCbcPkcs7
- SymmetricAlgorithmNames.DesCbcPkcs7
- SymmetricAlgorithmNames.TripleDesCbcPkcs7
- SymmetricAlgorithmNames.Rc2CbcPkcs7
- SymmetricAlgorithmNames.Rc2EcbPkcs7