MachineKey.Protect(Byte[], String[]) メソッド


指定されたデータを、暗号化または署名により保護します。Protects the specified data by encrypting or signing it.

 static cli::array <System::Byte> ^ Protect(cli::array <System::Byte> ^ userData, ... cli::array <System::String ^> ^ purposes);
public static byte[] Protect (byte[] userData, params string[] purposes);
static member Protect : byte[] * string[] -> byte[]
Public Shared Function Protect (userData As Byte(), ParamArray purposes As String()) As Byte()



保護されるデータ。The data to protect. このデータは、プレーンテキストとして渡されます。This data is passed as plaintext.


データの目的の一覧。A list of purposes for the data. この値が指定される場合、返された暗号文をデコードするために、同じリストが Unprotect(Byte[], String[]) メソッドに渡されます。If this value is specified, the same list must be passed to the Unprotect(Byte[], String[]) method in order to decipher the returned ciphertext.



暗号文データ。The ciphertext data.


userData パラメーターが null です。The userData parameter is null.

配列に空白のみのエントリが 1 つまたは複数含まれる目的。The purposes array contains one or more white-space-only entries.


このメソッドは、メソッドよりも優先されます。これにより、 Encode 呼び出し元はプレーンテキストデータを暗号化するか、署名するか、またはその両方を指定する必要があります。This method supersedes the Encode method, which requires the caller to specify whether the plaintext data should be encrypted, signed, or both. メソッドは、 Protect 適切な操作を実行し、データを安全に保護します。The Protect method performs the appropriate operation and securely protects the data. このメソッドによって生成される暗号化テキストデータは、メソッドによってのみ解読でき Unprotect ます。Ciphertext data produced by this method can only be deciphered by the Unprotect method.

パラメーターは、 purposes 暗号化テキストを特定の目的にロックできる理由の省略可能なリストです。The purposes parameter is an optional list of reasons that can lock the ciphertext to a specific purpose. このパラメーターを使用すると、アプリケーション内の異なるサブシステムによって実行される暗号化操作を分離できます。This parameter lets you isolate cryptographic operations performed by different subsystems within an application. 悪意のあるクライアントは、1つのサブシステムのメソッドの結果を取得 Protect し、別のサブシステムのメソッドに入力としてフィードできないようにする必要があります。これにより Unprotect 、アプリケーションのセキュリティが侵害される可能性があります。A malicious client should not be able to get the result of one subsystem's Protect method and feed it as input to another subsystem's Unprotect method, which could compromise application security. パラメーターを使用すると、 purposes 保護されたデータを最初に生成したコンポーネントだけが使用できるようになります。The purposes parameter helps ensure that protected data can only be used by the component that originally generated it. アプリケーションでは、各サブシステムで一意のリストが使用されるようにする必要があり purposes ます。Applications should make sure that each subsystem uses a unique purposes list.

たとえば、認証トークンを保護または保護解除するには、次の例のようなコードを使用してメソッドを呼び出すことができます。For example, to protect or unprotect an authentication token, you could call the method using code like the following example:

MachineKey.Protect(..., "Authentication token");  
MachineKey.Unprotect(..., "Authentication token");  
MachineKey.Protect(..., "Authentication token")  
MachineKey.Unprotect(..., "Authentication token")  

アプリケーションでは、パラメーターを動的に生成でき purposes ます。Applications can dynamically generate the purposes parameter. この場合、 Username: システムの他の部分で使用されているトークンと一致する悪意のあるクライアントが入力されるリスクを最小限に抑えるために、ユーザーが指定した値を固定値 ("" + ユーザー名"など) にプレフィックスとして付けます。In that case, prefix user-supplied values with a fixed value (like "Username: " + username) to minimize the risk of a malicious client crafting input that matches a token that is used by some other part of the system. 動的に生成された文字列は、固定文字列の後に記述する必要があります。Any dynamically-generated strings should come after fixed strings. たとえば、特定のユーザーに関連付けられているプライベートメッセージを保護または保護解除するには、次の例のようなコードを使用します。For example, to protect or unprotect a private message that is tied to a specific user, use code like the following example:

MachineKey.Protect(..., "Private message", "Recipient: " + username);  
MachineKey.Unprotect(..., "Private message", "Recipient: " + username);  
MachineKey.Protect(..., "Private message", "Recipient: " + username)  
MachineKey.Unprotect(..., "Private message", "Recipient: " + username)  

メソッドを Unprotect 呼び出す場合、パラメーターに指定された値は、 purposes メソッドに指定された値と同じである必要があり Protect ます。When the Unprotect method is called, the value that is provided for the purposes parameter must be the same value that was provided to the Protect method. それ以外の場合、操作は失敗し、例外が発生 CryptographicException します。Otherwise the operation will fail with a CryptographicException exception.

オプションに必要な構成設定は、 MachineKeyCompatibilityMode.Framework45 MachineKeySection.CompatibilityMode プロパティがオプションに設定されていない場合でも、このメソッドに必要です Framework45The configuration settings that are required for the MachineKeyCompatibilityMode.Framework45 option are required for this method even if the MachineKeySection.CompatibilityMode property is not set to the Framework45 option.