Compartir por


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

Definición

Protege los datos especificados mediante el cifrado o la firma.

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 no cifrado.

purposes
String[]

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

Devoluciones

Byte[]

Datos de texto cifrado.

Excepciones

El userData parámetro es null.

La matriz de propósitos contiene una o varias entradas de solo espacio en blanco.

Comentarios

Este método reemplaza 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 de forma segura los datos. El método solo puede descifrar Unprotect los datos de texto cifrado generados por este método.

El purposes parámetro es una lista opcional de razones que pueden bloquear el texto cifrado a un propósito específico. Este parámetro permite aislar las operaciones criptográficas realizadas por distintos 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 los datos protegidos solo los pueda usar el componente que lo generó originalmente. Las aplicaciones deben asegurarse de que cada subsistema usa una lista única purposes .

Por ejemplo, para proteger o desproteger un token de autenticación, podría 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 prefijos 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 que usa 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 Unprotect método , el 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