MachineKey.Protect(Byte[], String[]) Metodo

Definizione

Protegge i dati specificati crittografandoli o firmandoli.

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

Parametri

userData
Byte[]

Dati da proteggere. Questi dati vengono passati come testo normale.

purposes
String[]

Elenco di scopi per i dati. Se questo valore è specificato, lo stesso elenco deve essere passato al metodo Unprotect(Byte[], String[]) per decifrare il testo crittografato restituito.

Restituisce

Byte[]

I dati di testo crittografato.

Eccezioni

Il parametro userData è null.

La matrice degli scopi contiene una o più voci costituite solo da spazi vuoti.

Commenti

Questo metodo sostituisce il Encode metodo, che richiede al chiamante di specificare se i dati di testo normale devono essere crittografati, firmati o entrambi. Il Protect metodo esegue l'operazione appropriata e protegge in modo sicuro i dati. I dati di testo crittografato prodotti da questo metodo possono essere decifrati solo dal Unprotect metodo .

Il purposes parametro è un elenco facoltativo di motivi che possono bloccare il testo di crittografia a uno scopo specifico. Questo parametro consente di isolare le operazioni di crittografia eseguite da sottosistemi diversi all'interno di un'applicazione. Un client dannoso non deve essere in grado di ottenere il risultato del metodo di Protect un sottosistema e di aggiungerlo come input al metodo di un altro sottosistema, che potrebbe compromettere la sicurezza dell'applicazione Unprotect . Il purposes parametro consente di assicurarsi che i dati protetti possano essere usati solo dal componente che l'ha originariamente generata. Le applicazioni devono assicurarsi che ogni sottosistema usi un elenco univoco purposes .

Ad esempio, per proteggere o annullare la protezione di un token di autenticazione, è possibile chiamare il metodo usando il codice come l'esempio seguente:

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

Le applicazioni possono generare dinamicamente il purposes parametro. In tal caso, i valori forniti dall'utente con un valore fisso (ad esempio "Username: + nome utente) per ridurre al minimo il rischio di un input del client dannoso che corrisponde a un token utilizzato da un'altra parte del sistema. Tutte le stringhe generate dinamicamente devono venire dopo stringhe fisse. Ad esempio, per proteggere o rimuovere la protezione di un messaggio privato associato a un utente specifico, usare codice come l'esempio seguente:

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 viene chiamato il metodo, il Unprotect valore specificato per il purposes parametro deve essere lo stesso valore fornito al Protect metodo. In caso contrario, l'operazione avrà esito negativo con un'eccezione CryptographicException .

Le impostazioni di configurazione necessarie per l'opzione MachineKeyCompatibilityMode.Framework45 sono necessarie per questo metodo anche se la MachineKeySection.CompatibilityMode proprietà non è impostata sull'opzione Framework45 .

Si applica a