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 出现异常。

即使MachineKeySection.CompatibilityMode属性未设置为Framework45该选项,此方法也需要MachineKeyCompatibilityMode.Framework45选项所需的配置设置。

适用于