MachineKey.Protect(Byte[], String[]) Método

Definición

Cifra o firma los datos especificados para protegerlos.

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

Parámetros

userData
Byte[]

Datos que se van a proteger. Estos datos se pasan como texto simple.

purposes
String[]

Una lista de finalidades para los datos. Si se especifica este valor, se debe pasar la misma lista al método Unprotect(Byte[], String[]) para descifrar el texto cifrado devuelto.

Devoluciones

Byte[]

Los datos de texto cifrado.

Excepciones

El parámetro userData es null.

La matriz de fines contiene una o más entradas que solo son espacios en blanco.

Comentarios

Este método sustituye al Encode método , que requiere que el autor de la llamada especifique si los datos de texto no cifrado deben cifrarse, firmarse o ambos. El Protect método realiza la operación adecuada y protege los datos de forma segura. Los datos de texto cifrado generados por este método solo se pueden descifrar mediante el Unprotect método .

El purposes parámetro es una lista opcional de motivos que pueden bloquear el texto cifrado a un propósito específico. Este parámetro permite aislar las operaciones criptográficas realizadas por diferentes subsistemas dentro de una aplicación. Un cliente malintencionado no debe poder obtener el resultado del método de Protect un subsistema y alimentarlo como entrada al método de Unprotect otro subsistema, lo que podría poner en peligro la seguridad de la aplicación. El purposes parámetro ayuda a garantizar que el componente que lo generó originalmente solo puede usar los datos protegidos. Las aplicaciones deben asegurarse de que cada subsistema usa una lista única purposes .

Por ejemplo, para proteger o desproteger un token de autenticación, puede llamar al método mediante código como el ejemplo siguiente:

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

Las aplicaciones pueden generar dinámicamente el purposes parámetro . En ese caso, los valores proporcionados por el usuario con un prefijo con un valor fijo (como " "Username: + nombre de usuario) para minimizar el riesgo de que un cliente malintencionado cree entradas que coincidan con un token utilizado por alguna otra parte del sistema. Las cadenas generadas dinámicamente deben aparecer después de cadenas fijas. Por ejemplo, para proteger o desproteger un mensaje privado vinculado a un usuario específico, use código como el ejemplo siguiente:

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

Cuando se llama al método , el Unprotect valor proporcionado para el purposes parámetro debe ser el mismo valor que se proporcionó al Protect método . De lo contrario, se producirá un error en la operación con una CryptographicException excepción.

Los valores de configuración necesarios para la MachineKeyCompatibilityMode.Framework45 opción son necesarios para este método aunque la MachineKeySection.CompatibilityMode propiedad no esté establecida en la Framework45 opción .

Se aplica a