MachineKey.Protect(Byte[], String[]) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Protege os dados especificados criptografando-os ou assinando-os.
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. Esses 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 Unprotect(Byte[], String[]) método para decifrar o texto criptografado retornado.
Retornos
Os dados do texto criptografado.
Exceções
O userData parâmetro é nulo.
A matriz de finalidades contém uma ou mais entradas somente 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 criptografado 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 codificação 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 criptografado para uma finalidade específica. Esse parâmetro permite isolar operações criptográficas executadas por diferentes subsistemas em 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 pode 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 exemplo a seguir:
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 para o 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 .