CryptographicEngine.Encrypt(CryptographicKey, IBuffer, IBuffer) Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Mengenkripsi data dengan menggunakan algoritma simetris atau asimetris.
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
Kunci kriptografi yang digunakan untuk enkripsi. Ini bisa menjadi kunci asimetris atau simetris. Untuk informasi selengkapnya, lihat AsymmetricKeyAlgorithmProvider dan SymmetricKeyAlgorithmProvider.
- data
- IBuffer
Data untuk dienkripsi.
- iv
- IBuffer
Buffer yang berisi vektor inisialisasi. Ini bisa null untuk algoritma simetris dan harus selalu null untuk algoritma asimetris. Jika vektor inisialisasi (IV) digunakan untuk mengenkripsi data, Anda harus menggunakan IV yang sama untuk mendekripsi data. Anda dapat menggunakan metode GenerateRandom untuk membuat IV yang berisi data acak. IV lain, seperti vektor yang tidak dihasilkan, memerlukan implementasi kustom. Untuk informasi selengkapnya, lihat Kunci kriptografi.
Algoritma mode cipher block chaining (CBC) cipher memerlukan vektor inisialisasi. Untuk informasi selengkapnya, lihat Keterangan.
Mengembalikan
Data terenkripsi.
Contoh
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;
}
Keterangan
Dari algoritma simetris yang didukung oleh Microsoft, berikut ini memerlukan vektor inisialisasi:
- SymmetricAlgorithmNames.DesCbc
- SymmetricAlgorithmNames.TripleDesCbc
- SymmetricAlgorithmNames.Rc2Cbc
- SymmetricAlgorithmNames.AesCbc
- SymmetricAlgorithmNames.AesCbcPkcs7
- SymmetricAlgorithmNames.DesCbcPkcs7
- SymmetricAlgorithmNames.TripleDesCbcPkcs7
- SymmetricAlgorithmNames.Rc2CbcPkcs7
- SymmetricAlgorithmNames.Rc2EcbPkcs7