CryptographicEngine.Encrypt(CryptographicKey, IBuffer, IBuffer) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Шифрует данные с помощью симметричного или асимметричного алгоритма.
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
Параметры
- key
- CryptographicKey
Криптографический ключ, используемый для шифрования. Это может быть асимметричный или симметричный ключ. Дополнительные сведения см. в разделах AsymmetricKeyAlgorithmProvider и SymmetricKeyAlgorithmProvider.
- data
- IBuffer
Данные для шифрования.
- iv
- IBuffer
Буфер, содержащий вектор инициализации. Это значение может иметь значение NULL для симметричного алгоритма и всегда иметь значение NULL для асимметричного алгоритма. Если для шифрования данных использовался вектор инициализации (IV), необходимо использовать тот же iv для расшифровки данных. Метод GenerateRandom можно использовать для создания iv, содержащего случайные данные. Для других IP-адресов, таких как векторы без векторов, требуется пользовательская реализация. Дополнительные сведения см. в разделе Криптографические ключи.
Алгоритмам режима блочного шифрования шифров (CBC) требуется вектор инициализации. Дополнительные сведения см. в подразделе "Примечания".
Возвращаемое значение
Зашифрованные данные.
Примеры
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;
}
Комментарии
Из симметричного алгоритма, поддерживаемого корпорацией Майкрософт, для следующих требуется вектор инициализации:
- SymmetricAlgorithmNames.DesCbc
- SymmetricAlgorithmNames.TripleDesCbc
- SymmetricAlgorithmNames.Rc2Cbc
- SymmetricAlgorithmNames.AesCbc
- SymmetricAlgorithmNames.AesCbcPkcs7
- SymmetricAlgorithmNames.DesCbcPkcs7
- SymmetricAlgorithmNames.TripleDesCbcPkcs7
- SymmetricAlgorithmNames.Rc2CbcPkcs7
- SymmetricAlgorithmNames.Rc2EcbPkcs7