MachineKey.Protect(Byte[], String[]) 方法

定義

藉由加密或簽署的方式保護資料。

public:
 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()

參數

userData
Byte[]

要保護的資料。 這項資料會以純文字傳遞。

purposes
String[]

資料的用途清單。 如果指定這個值,則必須將相同的清單傳遞至Unprotect(Byte[], String[])方法,以解密傳回的密碼文字。

傳回

Byte[]

密碼文字資料。

例外狀況

userData 參數為 null。

目的陣列包含一或多個只包含空白字元的項目。

備註

這個方法會 Encode 取代 方法,這需要呼叫端指定純文字資料是否應該加密、簽署或兩者。 方法 Protect 會執行適當的作業,並安全地保護資料。 這個方法所產生的加密文字資料只能由 Unprotect 方法解碼。

參數 purposes 是選擇性的原因清單,可將加密文字鎖定為特定用途。 此參數可讓您隔離應用程式內不同子系統所執行的密碼編譯作業。 惡意用戶端不應該能夠取得一個子系統 Protect 方法的結果,並將它作為另一個子系統方法的 Unprotect 輸入饋送,這可能會危害應用程式安全性。 參數 purposes 有助於確保受保護的資料只能由原本產生資料的元件使用。 應用程式應該確定每個子系統都使用唯 purposes 一的清單。

例如,若要保護或取消保護驗證權杖,您可以使用如下列範例的程式碼呼叫 方法:

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

應用程式可以動態產生 purposes 參數。 在此情況下,請將使用者提供的值前面加上固定值 (,例如 「 Username: 」 + 使用者名稱) ,以將惡意用戶端製作輸入的風險降到最低,以符合系統其他部分使用的權杖。 任何動態產生的字串都應該在固定字串之後。 例如,若要保護或取消保護系結至特定使用者的私人訊息,請使用類似下列範例的程式碼:

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 相同值。 否則作業將會失敗,但 CryptographicException 發生例外狀況。

即使屬性未設定為 Framework45 選項,這個方法 MachineKeySection.CompatibilityMode 也需要選項所需的 MachineKeyCompatibilityMode.Framework45 組態設定。

適用於