Comment puis-je stocker un hachage dans une database SQL Server en utilisant C #?

J'essaie de créer un site Web avec une fonction de connection / déconnection et je prévois de hacher et de saler correctement le mot de passe. Le problème auquel je fais face, cependant, est de savoir comment je vais stocker le mot de passe dans la database. Je sais que j'ai besoin de stocker le mot de passe hashed + salted dans la database (pas en text brut ou crypté), mais je ne sais pas comment techniquement contourner l'insertion des données binarys dans la database.

Dans mes premières tentatives, la seule façon d'get datatables dans la database serait de convertir datatables binarys en base64 et de les insert dans le champ mot de passe varchar , mais quelque chose me dit que ce n'est pas la bonne façon de le faire.

Le champ de mot de passe dans la database est actuellement un varchar mais si je comprends bien, un mot de passe haché est binary. Donc même si j'ai changé le champ mot de passe en object binary, je ne sais toujours pas comment l' insert!

Si je n'ai aucun sens, veuillez requestr des éclaircissements et je reviendrai à vous.

Non, un mot de passe haché ne doit pas être stocké dans un champ varbinary, vous pouvez l'encoder et le stocker dans un champ varchar. Base64 est une bonne alternative pour encoder n'importe quel type de caractères.

Dans Microsoft SQL Server, vous pouvez stocker des données binarys dans des colonnes ayant un type de données binary (ou varbinary si vous avez besoin de données de longueur variable). Vous pouvez l'utiliser pour vos passwords hachés et salés. Si vous utilisez une fonction de hachage 512 bits et que vous souhaitez utiliser un sel de 512 bits, vous avez besoin de 2 * 512/8 = 128 octets (par exemple, binary(128) pour stocker le sel et le hachage.

Normalement, l'API que vous utilisez pour lire et écrire la database devrait vous aider à lire et à écrire des données binarys. Cependant, vous voulez peut-être utiliser un code SQL pour insert directement une valeur binary dans une table. Vous pouvez utiliser une syntaxe comme celle-ci:

 insert into MyTable values (0x123456789ABCDEF) 

Pas vraiment une réponse à votre question, mais si vous luttez avec la mise en œuvre de votre propre fonctionnalité de mot de passe, vous pouvez envisager d'utiliser un composant préconstruit de force indussortingelle pour éviter les erreurs gênantes dans le futur. ASP.NET a un fournisseur d'appartenance par exemple.