CryptographicEngine.Encrypt(CryptographicKey, IBuffer, IBuffer) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
対称アルゴリズムまたは非対称アルゴリズムを使用してデータを暗号化します。
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 を作成できます。 nonce で生成されたベクトルなど、他の IV にはカスタム実装が必要です。 詳細については、「 暗号化キー」を参照してください。
暗号ブロック チェーン (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;
}
注釈
Microsoft でサポートされている対称アルゴリズムのうち、次に初期化ベクトルが必要です。
- SymmetricAlgorithmNames.DesCbc
- SymmetricAlgorithmNames.TripleDesCbc
- SymmetricAlgorithmNames.Rc2Cbc
- SymmetricAlgorithmNames.AesCbc
- SymmetricAlgorithmNames.AesCbcPkcs7
- SymmetricAlgorithmNames.DesCbcPkcs7
- SymmetricAlgorithmNames.TripleDesCbcPkcs7
- SymmetricAlgorithmNames.Rc2CbcPkcs7
- SymmetricAlgorithmNames.Rc2EcbPkcs7