Je crée une application Windows, à laquelle vous devez d'abord vous connecter.
Les détails du compte se composent du nom d'utilisateur et du mot de passe, et ils doivent être enregistrés localement.
C'est juste une question de sécurité, donc les autres personnes utilisant le même ordinateur ne peuvent pas voir les données personnelles de tout le monde.
Quelle est la meilleure / la plus sûre façon de sauvegarder ces données?
Je ne veux pas utiliser de base de données, j'ai donc essayé certaines choses avec les fichiers de ressources.
Mais comme je suis un peu nouveau avec ça, je ne suis pas tout à fait sûr de ce que je fais et où je devrais chercher une solution.
Réponses:
Si vous souhaitez simplement vérifier / valider le nom d'utilisateur et le mot de passe saisis , utilisez la classe Rfc2898DerivedBytes (également appelée fonction de dérivation de clé basée sur le mot de passe 2 ou PBKDF2). C'est plus sûr que d'utiliser un cryptage comme Triple DES ou AES car il n'y a pas de moyen pratique de passer du résultat de RFC2898DerivedBytes au mot de passe. Vous ne pouvez passer que d'un mot de passe au résultat. Voir Est-il acceptable d'utiliser le hachage SHA1 du mot de passe comme sel lors de la dérivation de la clé de chiffrement et IV de la chaîne de mot de passe? pour un exemple et une discussion pour .Net ou String crypter / décrypter avec le mot de passe c # Metro Style pour WinRT / Metro.
Si vous stockez le mot de passe pour le réutiliser, par exemple le fournir à un tiers, utilisez l' API de protection des données Windows (DPAPI) . Cela utilise les clés générées et protégées par le système d'exploitation et l' algorithme de cryptage Triple DES pour crypter et décrypter les informations. Cela signifie que votre application n'a pas à se soucier de la génération et de la protection des clés de chiffrement, une préoccupation majeure lors de l'utilisation de la cryptographie.
En C #, utilisez la classe System.Security.Cryptography.ProtectedData . Par exemple, pour crypter une donnée, utilisez
ProtectedData.Protect()
:Stockez l'entropie et le texte chiffré en toute sécurité, par exemple dans un fichier ou une clé de registre avec des autorisations définies afin que seul l'utilisateur actuel puisse le lire. Pour accéder aux données d'origine, utilisez
ProtectedData.Unprotect()
:Notez qu'il existe des considérations de sécurité supplémentaires. Par exemple, évitez de stocker des secrets comme des mots de passe sous forme de fichier
string
. Les chaînes sont immuables, car elles ne peuvent pas être notifiées en mémoire afin que quelqu'un qui regarde la mémoire de l'application ou une image mémoire puisse voir le mot de passe. Utilisez plutôt SecureString ou un octet [] et n'oubliez pas de les supprimer ou de les remettre à zéro dès que le mot de passe n'est plus nécessaire.la source
ProtectedData
est de ne pas avoir à m'inquiéter de Stocker l'entropie et le texte chiffré en toute sécurité, ... pour que seul l'utilisateur actuel puisse le lire . Je pense que cela offre de la simplicité dans la mesure où je peux les stocker, mais c'est pratique et seul le CurrentUser peut le déchiffrer. Leentropy
paramètre est également facultatif et ressemble à un IV où l'unicité compte plus que le secret. En tant que telle, la valeur pourrait probablement être omise ou codée en dur dans le programme dans les situations où la variation et la mise à jour du texte en clair sont rares.Je l'ai déjà utilisé et je pense que pour m'assurer que les informations d'identification persistent et de la meilleure manière sécurisée
ConfigurationManager
classeSecureString
classeCryptography
espace de noms.Ce lien sera d'une grande aide j'espère: Cliquez ici
la source
DPAPI est juste à cet effet. Utilisez DPAPI pour crypter le mot de passe la première fois que l'utilisateur entre, stockez-le dans un emplacement sécurisé (registre de l'utilisateur, répertoire de données d'application de l'utilisateur, sont quelques choix). Chaque fois que l'application est lancée, vérifiez l'emplacement pour voir si votre clé existe, si elle utilise DPAPI pour la déchiffrer et autoriser l'accès, sinon refusez-la.
la source
Cela ne fonctionne que sur Windows, donc si vous envisagez d'utiliser multiplateforme dotnet core, vous devrez chercher ailleurs. Voir https://github.com/dotnet/corefx/blob/master/Documentation/architecture/cross-platform-cryptography.md
la source
Je voulais crypter et décrypter la chaîne en tant que chaîne lisible.
Voici un exemple rapide très simple dans C # Visual Studio 2019 WinForms basé sur la réponse de
@Pradip
.Cliquez avec le bouton droit sur projet> propriétés> paramètres> Créer un paramètre
username
etpassword
.Vous pouvez désormais exploiter les paramètres que vous venez de créer. Ici, je sauvegarde le
username
etpassword
mais je ne crypte que lepassword
champ de valeur respectable duuser.config
fichier.Exemple de chaîne cryptée dans le
user.config
fichier.Code complet
la source