Compartilhar via


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

Definição

Protege os dados especificados ao criptografá-los ou assiná-los.

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[]

Os dados a serem protegidos. Estes dados são passados como texto sem formatação.

purposes
String[]

Uma lista de finalidades para os dados. Se esse valor for especificado, a mesma lista deverá ser passada para o método Unprotect(Byte[], String[]) para decifrar o texto cifrado retornado.

Retornos

Byte[]

Os dados do texto cifrado.

Exceções

O parâmetro userData é nulo.

A matriz de finalidades contém uma ou mais entradas apenas com espaço em branco.

Comentários

Esse método substitui o Encode método, que exige que o chamador especifique se os dados de texto não criptografados devem ser criptografados, assinados ou ambos. O Protect método executa a operação apropriada e protege os dados com segurança. Os dados de criptografia produzidos por esse método só podem ser decifrados pelo Unprotect método.

O purposes parâmetro é uma lista opcional de motivos que podem bloquear o texto cifrado para uma finalidade específica. Esse parâmetro permite isolar operações criptográficas executadas por diferentes subsistemas dentro de um aplicativo. Um cliente mal-intencionado não deve ser capaz de obter o resultado do método de Protect um subsistema e alimentá-lo como entrada para o método de outro subsistema, o que poderia comprometer a segurança do Unprotect aplicativo. O purposes parâmetro ajuda a garantir que os dados protegidos só possam ser usados pelo componente que os gerou originalmente. Os aplicativos devem garantir que cada subsistema use uma lista exclusiva purposes .

Por exemplo, para proteger ou desproteger um token de autenticação, você pode chamar o método usando código como o exemplo a seguir:

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

Os aplicativos podem gerar dinamicamente o purposes parâmetro. Nesse caso, prefixe valores fornecidos pelo usuário com um valor fixo (como "Username: " + nome de usuário) para minimizar o risco de um cliente mal-intencionado criar entrada que corresponda a um token que é usado por alguma outra parte do sistema. Todas as cadeias de caracteres geradas dinamicamente devem vir após cadeias de caracteres fixas. Por exemplo, para proteger ou desproteger uma mensagem privada vinculada a um usuário específico, use o código como o seguinte exemplo:

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

Quando o Unprotect método é chamado, o valor fornecido para o purposes parâmetro deve ser o mesmo valor fornecido ao Protect método. Caso contrário, a operação falhará com uma CryptographicException exceção.

As configurações necessárias para a opção MachineKeyCompatibilityMode.Framework45 são necessárias para esse método, mesmo que a MachineKeySection.CompatibilityMode propriedade não esteja definida como a opção Framework45 .

Aplica-se a