2010-06-27 28 views
0

J'ai besoin de stocker le nom d'utilisateur et mot de passe dans un app.config. Je veux crypter ces valeurs en utilisant l'algorithme de Rijndael. Où puis-je stocker la clé et IV pour décrypter l'un et pw? J'ai besoin de déployer l'application sur différents serveurs avec différents utilisateurs.Magasin IV et clé pour Rijndael

+0

@IUnknownPointer: Vraiment? Comme ça? –

Répondre

1

Le cryptage du fichier web.config ou du fichier app.config se fait généralement avec un cryptage RSA ou DPAPI.

Je ne sais pas si cela vous conviendrait dans votre cas, il n'est efficace que si les utilisateurs des applications sont restreints et non les administrateurs.

http://msdn.microsoft.com/en-us/library/ff647398.aspx

+0

DPAPI est probablement le meilleur qui peut être fait sans utiliser de périphériques matériels. RSA ne va pas aider. –

+0

Vous pouvez utiliser le cryptage RSA sur plusieurs serveurs en permettant à la clé d'être exportable, mais ce n'est pas une bonne solution ici, je pense. –

0

Certainement ne pas stocker dans l'ensemble - un regard relativement simple à l'IL serait probablement abandonner le secret. Même l'observez, fournirait peu de sécurité supplémentaire.

Le plus simple serait d'utiliser la sécurité du système d'exploitation \ système de fichiers localement sur les différents serveurs pour contrôler l'accès en lecture au fichier de clé.

0

Idéalement sur un fichier texte dans un emplacement non accessible via le web, uniquement via le système de fichiers local avec des permissions serrées.

Si vous avez besoin de distribuer l'application, vous pouvez utiliser la structure suivante

  • C:\MyApp pour la clé et d'autres informations privées
  • C:\MyApp\www pour le répertoire virtuel

Cela permettra d'éviter indiscrets yeux (ou des bogues du serveur web) pour accéder aux données. Seul l'accès physique à la machine peut potentiellement le révéler, et cela peut généralement être mieux contrôlé.

0

Comment l'utilisation de cryptage de clé pour le faire? Il n'y a (pour autant que je sache) pas de moyen facile de le faire, mais vous pouvez vous frayer un chemin dans le cadre en utilisant la réflexion. La clé de la machine n'est pas ou partiellement stockée sur une machine. Si vous configurez ASP.NET pour 'Générer une clé unique pour chaque application', le chemin de l'application est utilisé pour dériver la clé.

Le code serait quelque chose comme ceci:

private static MethodInfo _cookieEncryptMethod; 
private static MethodInfo _cookieDecryptMethod; 

public static string MachineKeyEncrypt(string data) 
{ 
    if (_cookieEncryptMethod == null) 
    { 
     _cookieEncryptMethod = Type.GetType("System.Web.Security.CookieProtectionHelper").GetMethod("Encode", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.InvokeMethod); 
    } 

    var dataBytes = Encoding.UTF8.GetBytes(data); 

    return (string) _cookieEncryptMethod.Invoke(null, new object[] { CookieProtection.All, dataBytes, dataBytes.Length }); 
} 

public static string MachineKeyDecrypt(string source) 
{ 
    if (_cookieDecryptMethod == null) 
    { 
     _cookieDecryptMethod = Type.GetType("System.Web.Security.CookieProtectionHelper").GetMethod("Decode", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.InvokeMethod); 
    } 

    var data = (byte[]) _cookieDecryptMethod.Invoke(null, new object[] { CookieProtection.All, source }); 

    return Encoding.UTF8.GetString(data); 
}