Cryptage efficace du mot de passe

J'ai pris un coup d'oeil à la StackOverflow question, "Le mot de passe de Chiffrement /Couche de Base de données AES ou de l'Application de la Couche d'AES," et je voudrais de manière efficace et efficiente de hachage mes mots de passe lors de l'inscription (web app) et ensuite être en mesure de vérifier qu'ils sont corrects sur connexion. Je suis à l'aide de VB, mais à l'aise à l'aide de C#.

J'aimerais utiliser Jeff Atwood du Cryptage de classe décrite dans ".NET de Chiffrement Simplifiée" car il est vraiment facile à comprendre. Il dispose d'un hachage de la classe mais je n'ai aucune idée de comment le "login" et de comparer les hachages après qu'ils ont été hachés. C'est Jeff démonstration de ses méthodes de hachage à l'aide de son Cryptage de classe:

Sub DemoHash()
    Dim d As New Encryption.Data( _
        "{ts '2004-10-09 08:10:04'}The world is beautiful and needs caring by its children")

    Dim hash As New Encryption.Hash(Encryption.Hash.Provider.SHA1)
    Dim hash2 As New Encryption.Hash(Encryption.Hash.Provider.SHA256)
    Dim hash3 As New Encryption.Hash(Encryption.Hash.Provider.SHA384)
    Dim hash4 As New Encryption.Hash(Encryption.Hash.Provider.SHA512)
    Dim hash5 As New Encryption.Hash(Encryption.Hash.Provider.MD5)
    Dim hash6 As New Encryption.Hash(Encryption.Hash.Provider.CRC32)

    hash.Calculate(d)
    hash2.Calculate(d)
    hash3.Calculate(d)
    hash4.Calculate(d)
    hash5.Calculate(d)

    Console.WriteLine("SHA1:   " & hash.Value.Hex)
    Console.WriteLine("SHA256: " & hash2.Value.Hex)
    Console.WriteLine("SHA384: " & hash3.Value.Hex)
    Console.WriteLine("SHA512: " & hash4.Value.Hex)
    Console.WriteLine("MD5:    " & hash5.Value.Hex)
    Console.WriteLine("CRC32:  " & hash6.Calculate(d).Hex)
    Console.WriteLine()

    Dim salt As New Encryption.Data("salty!")
    Console.WriteLine("Salted CRC32:  " & hash6.Calculate(d, salt).Hex)

    Console.WriteLine("Press ENTER to continue...")
    Console.ReadLine()
End Sub

Donc mes questions sont:

  1. Je peux crypter le mot de passe (même si je n'ai pas l'intention de les stocker) et le hash d'une chaîne. Si je devais avoir un utilisateur appelé "barry" avec un mot de passe de 'fishlegs', quelle est la meilleure façon de conserver son mot de passe et récupérer?
  2. Dans SQL Server; est binaire ou nvarchar la meilleure option pour le stockage de la table de hachage?
  3. Basée sur le "barry" et son mot de passe de ce qui est effectivement le hachage de stockage? Est-il un cryptage de "fishlegs' annexé à un sel?

La cryptographie est dur!

Merci à tous ceux qui peuvent aider...

source d'informationauteur dooburt