Quel est le moyen le plus facile pour crypter un mot de passe quand je l'enregistrer dans la base de registre?
Actuellement, je suis en train d'écrire en texte clair oups!, c'est un programme de la maison de sorte qu'il n'est pas si mal mais j'aimerais bien le faire. Comment dois-je aller sur le chiffrement présent lors de l'écriture dans le registre et comment les décrypter?
OurKey.SetValue("Password", textBoxPassword.Text);
- Il y a une réponse à une question connexe - Simple 2 voies de chiffrement pour le C#
- Vous pourriez demander à l'utilisateur un mot de passe pour crypter les données. Diviser la chaîne en un tableau de char et de la fonte de caractères en entier et la somme de tous les nombres entiers. Maj chaque octet de la chaîne par la somme et il sera sécurisé.
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas à déchiffrer l'authentification des mots de passe!
De hachage utilisant quelque chose comme le SHA256 fournisseur et quand vous avez de défi, de hachage à l'entrée de l'utilisateur et de voir si les deux hachages de match.
Laissant les mots de passe réversible est un vraiment horrible modèle.
Edit2: j'ai pensé que nous devions parler de la ligne de front de l'authentification. Bien sûr il ya des cas où vous souhaitez crypter les mots de passe pour d'autres choses qui doivent être réversible, mais il devrait y avoir un 1-way de verrouillage sur le dessus de tout (à quelques exceptions près).
J'ai mis à jour l'algorithme de hachage mais pour la meilleure résistance possible, vous voulez garder un privé, le sel et l'ajouter à votre entrée avant hachage. Vous voulez faire cela à nouveau lorsque vous comparez des. Cela ajoute une autre couche qui rend encore plus difficile pour quelqu'un de s'inverser.
Veuillez également tenir compte de "salage" votre table de hachage (pas un concept culinaire!). Essentiellement, cela signifie ajoutant quelques aléatoire de texte pour le mot de passe avant de hachage elle.
"Le sel de la valeur permet de ralentir à un attaquant d'effectuer une attaque par dictionnaire si votre banque d'informations d'identification d'être compromise, vous donnant plus de temps pour détecter et réagir au compromis."
Pour stocker des mots de passe:
a) Générer aléatoirement une valeur salt:
b) Ajouter le sel pour le mot de passe.
c) hacher le combiné mot de passe & sel:
d) Ajouter le sel à la résultante de hachage.
e) Stocker le résultat dans votre magasin d'utilisateur de la base de données.
Cette approche signifie que vous n'avez pas besoin de stocker le sel séparément puis de recalculer la valeur de hachage en utilisant le sel de la valeur et le mot de passe en clair de la valeur obtenue à partir de l'utilisateur.
Modifier: Comme la puissance de calcul brute devient moins cher et plus rapide, la valeur de hachage -- ou le salage des hachages-a baissé. Jeff Atwood a une excellente mise à jour 2012 trop longues à répétition dans son intégralité ici qui stipule:
Tom Scott a raison dans sa couverture de comment (ne pas) pour stocker les mots de passe, sur Computerphile.
https://www.youtube.com/watch?v=8ZtInClXe1Q
Si vous le pouvez à tout l'éviter, ne pas essayer de stocker les mots de passe vous-même. Utiliser un pré-établi, digne de confiance de l'utilisateur plate-forme d'authentification (par exemple: OAuth fournisseurs, vous de la société domaine Active Directory, etc.) au lieu de cela.
Si vous devez stocker des mots de passe, ne pas suivre les conseils ici. Au moins, pas sans la consultation la plus récente et de bonne réputation publications applicables à la langue de votre choix.
Il y a certainement beaucoup de gens intelligents ici, et probablement même quelques bons conseils donnés. Mais les chances sont fortes pour que, au moment où vous lisez ceci, toutes les réponses ici (y compris celui-ci) sera déjà obsolète.
La bonne façon de stocker les mots de passe des changements au fil du temps.
Probablement plus fréquemment que certaines personnes changent leurs sous-vêtements.
Tout ce que dit, voici quelques conseils généraux qui, nous l'espérons être utile pour un certain temps.
Processus les mots de passe exactement comme saisi par l'utilisateur au cours du processus de création. Tout ce que vous faites pour le mot de passe avant de l'envoyer à la cryptographie module sera probablement juste de l'affaiblir. L'une des méthodes suivantes aussi ajoute à la complexité du stockage de mot de passe & processus de vérification, ce qui pourrait causer d'autres problèmes (peut-être même d'introduire des vulnérabilités) en bas de la route.
Rejeter la création de tous les mots de passe ne peuvent pas être stockés sans modification. Renforcement de la ci-dessus. Si il y a quelque raison que votre mot de passe mécanisme de stockage ne peut pas traiter correctement certains caractères, des espaces, des chaînes, ou des longueurs de mot de passe, puis retourne une erreur et permettre à l'utilisateur de connaître les limites du système de sorte qu'ils peuvent réessayer avec un mot de passe qui s'adapte à l'intérieur d'eux. Pour une meilleure expérience utilisateur, faites une liste de ces limitations accessible à l'utilisateur initial. Ne vous inquiétez pas, le laisser seul la peine de cacher la liste d'attaquants - ils le comprendre assez facilement sur leur propre de toute façon.
Le plus important...
Ne vous contentez pas d'écouter n'importe qui ici.
Aller chercher une bonne réputation et très récente publication sur les méthodes appropriées de stockage de mot de passe pour la langue de votre choix. En fait, vous devriez trouver plusieurs publications récentes à partir de plusieurs sources distinctes qui sont en accord avant de vous installer sur une seule méthode.
Il est extrêmement possible que tout ce que tout le monde ici (moi y compris) a dit a déjà été remplacée par de meilleures technologies ou rendue précaire par nouvellement développé des méthodes d'attaque. De trouver quelque chose qui est plus probablement que non.
C'est ce que vous aimeriez faire:
Vous pouvez le faire avec cette les classes suivantes.
Cette classe est une classe générique est le point de terminaison de client. Il permet CIO de différents algorithmes de chiffrement à l'aide de Ninject.
Cette classe suivante est la ninject classe qui vous permet d'injecter les différents algorithmes:
C'est l'interface que tout algorithme doit mettre en œuvre pour crypter/décrypter des chaînes:
C'est une mise en œuvre à l'aide de la TripleDES algorithme:
Vous pouvez regarder ma vidéo et télécharger le code pour pour cela : http://www.wrightin.gs/2008/11/how-to-encryptdecrypt-sensitive-column-contents-in-nhibernateactive-record-video.html
Une option serait de stocker la valeur de hachage (SHA-1, MD5) du mot de passe à la place du mot de passe en clair, et à chaque fois que vous voulez voir si le mot de passe est bon, il suffit de le comparer à celui de hachage.
Si vous avez besoin de stockage sécurisé (par exemple pour un mot de passe que vous utilisez pour vous connecter à un service), alors le problème est plus compliqué.
Si c'est juste pour l'authentification, alors il suffit d'utiliser la table de hachage.
Si vous voulez être en mesure de décrypter le mot de passe, je pense que le plus simple serait d'utiliser DPAPI (user mode de stockage) pour crypter/décrypter. De cette façon, vous n'avez pas à jouer avec des clés de chiffrement, les stocker dans un endroit ou du code en dur dans votre code - dans les deux cas, quelqu'un peut découvrir par la recherche dans la base de registre, les paramètres de l'utilisateur ou à l'aide de Réflecteur.
D'utiliser autrement les hachages SHA1 ou MD5, comme d'autres l'ont dit ici.
Comme ligget78 dit, DPAPI serait une bonne solution pour le stockage des mots de passe. Découvrez la ProtectedData classe sur MSDN par exemple l'utilisation.
Si c'est un mot de passe utilisé pour l'authentification par votre application, puis hacher le mot de passe que d'autres suggèrent.
Si vous êtes le stockage de mots de passe pour une ressource externe, vous voudrez souvent pour être en mesure de demander à l'utilisateur de ces informations et lui donner la possibilité de les sauvegarder de manière sécurisée. Windows fournit les informations d'Identification de l'INTERFACE utilisateur (CredUI) pour cela, il existe un certain nombre d'échantillons montrant comment l'utiliser dans .NET, y compris ce un sur MSDN.
J'ai regardé partout pour un bon exemple de chiffrement et de déchiffrement des processus, mais la plupart étaient trop complexes.
De toute façon, il y a de nombreuses raisons quelqu'un peut vouloir décrypter certaines valeurs de texte, y compris les mots de passe. La raison pour laquelle je besoin pour déchiffrer le mot de passe sur le site, je travaille actuellement est parce qu'ils veulent assurez-vous que lorsque quelqu'un est forcé de changer leur mot de passe lorsqu'il expire que nous ne les laissons pas la changer avec une variante proche de le même mot de passe qu'ils ont utilisé dans les x derniers mois.
J'ai donc écrit un processus qui va le faire d'une manière simplifiée. J'espère que ce code est bénéfique à quelqu'un. Pour tous je sais que je peut mettre fin à l'aide de cette autre fois pour une autre entreprise/site.
Si vous avez besoin de plus que cela, par exemple la sécurisation d'une chaîne de connexion (pour la connexion à une base de données), cochez cette l'article, car il offre le meilleur "option" pour cela.
Oli réponse est aussi bonne, car elle montre comment vous pouvez créer un hash d'une chaîne.
..NET fournit cryptographics services dans les classes contenues dans le
Système.De sécurité.La cryptographie espace de noms.
Plutôt que de chiffrer/déchiffrer, vous devriez être en train de passer le mot de passe par le biais d'un algorithme de hachage, md5/sha512, ou similaire. Ce que vous devrait idéalement faire est de hacher le mot de passe et de stocker la valeur de hachage, puis, quand le mot de passe est nécessaire, vous hachage de l'entrée et de comparer les entrées. Un mot de passe sera alors de ne jamais être "décrypté", tout simplement haché, puis de les comparer.