2010-07-13 4 views
11

Dans l'un de mes sites Web ASP.Net, je dois fournir un lien vers l'utilisateur dans lequel tous les paramètres de chaîne de requête doivent être cryptés. Ce que je pense est d'utiliser la commande "aspnet_regiis" (utilisée pour chiffrer les données web.config), transmettre la sortie comme une chaîne de requête dans l'URL publiée.Comment puis-je chiffrer les paramètres de chaîne de requête dans le site Web ASP.NET?

Lorsque l'utilisateur clique sur ce lien, je décrypte d'abord la chaîne, puis récupère les données d'origine pour la chaîne de requête.

Ai-je raison de le faire? Existe-t-il une bonne technique pour chiffrer et déchiffrer les chaînes de requête?

+0

Vous n'avez pas besoin d'appeler une application externe. Utilisez l'API de cryptographie dans l'infrastructure pour crypter/décrypter des données. http://msdn.microsoft.com/en-us/library/system.security.cryptography(VS.71).aspx – onof

+0

Voici comment j'ai abordé cette tâche: http://blackbeltcoder.com/Articles/asp/encrypting- query-arguments. –

+0

Tout cela est intégré dans ASP.NET - pas besoin d'écrire votre propre crypto: http://brockallen.com/2012/06/21/use-the-machinekey-api-to-protect-values-in-asp -net/ –

Répondre

5

Une bonne façon de chiffrer et de chaîne dans le contexte de décryptage de ASP.NET est d'utiliser le FormsAuthentication.Encrypt Method

Il semble être seulement adapté pour les biscuits, mais il fonctionne bien dans d'autres contextes, plus, vous pouvez ajouter un date d'expiration ainsi (ou DateTime.MaxValue si elle n'est pas nécessaire), ceci est un exemple de code:

public static string Encrypt(string content, DateTime expiration) 
{ 
    return FormsAuthentication.Encrypt(new FormsAuthenticationTicket(1, 
     HttpContext.Current.Request.UserHostAddress, // or something fixed if you don't want to stick with the user's IP Address 
     DateTime.Now, expiration, false, content)); 
} 

public static string Decrypt(string encryptedContent) 
{ 
    FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(encryptedContent); 
    if (!ticket.Expired) 
      return ticket.UserData; 

    return null; // or throw... 
} 
Questions connexes