Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Encrypt Password Field

Îåêßíçóå áðü ôï ìÝëïò JohnL. Τελευταία δημοσίευση από το μέλος JohnL στις 10-04-2008, 03:36. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  09-04-2008, 11:54 41442

    Encrypt Password Field

    Σε μία βάση δεδομένων, έχω φτιάξει ένα πίνακα που περιέχει ονόματα και κωδικούς χρηστών ώστε να μπορούν να κανουν login.

    Σκέφτηκα να κωδικοποιήσω κάπως τον κωδικό, ώστε να μην είναι τόσο εύκολο να διαβαστούν, για λόγους ασφαλείας. Πώς μπορώ να υλοποιήσω κάτι τέτοιο?
  •  09-04-2008, 13:46 41444 σε απάντηση της 41442

    Απ: Encrypt Password Field

    Αν χρησιμοποιείς SQL Server 2005 μπορείς να κρυπτογραφήσεις τη στήλη σε επίπεδο βάσης, με κλειδιά τα οποία αποθηκεύονται και προστατεύονται στη βάση. Ρίξε μία ματιά στο Encryption How To Topics. Αν δεν έχεις SQL Server 2005 ο καλύτερος τρόπος είναι να δημιουργήσεις ένα hash από το password του χρήστη και να αποθηκεύσεις στη βάση μόνο το hash. Κάθε φορά που ο χρήστης δίνει το password, δημιουργείς ξανά το hash και συγκρίνεις την τιμή του με αυτή που έχεις αποθηκεύσει. Μπορείς να χρησιμοποιήσεις τις κλάσεις του System.Security.Cryptography namespace για να το κάνεις αυτό, οι οποίες υλοποιούν μερικούς πολύ ισχυρούς αλγόριθμους. Ρίξε μία ματιά στο Ensuring Data Integrity with Hash Codes.

    Τέλος, αν θέλεις να κρυπτογραφήσεις τα passwords των χρηστών ενός web site μπορείς να χρησιμοποιήσεις τον Authentication provider του ASP.NET ο οποίος δημιουργεί τους δικούς του πίνακες για τους χρήστες και αναλαμβάνει και την κρυπτογράφηση του password ... μεταξύ πολλών άλλων ευκολιών.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  09-04-2008, 22:25 41454 σε απάντηση της 41444

    Απ: Encrypt Password Field

    Αποφάσισα να χρησιμοποιήσω τον 2ο τρόπο με τα Hashes, μια και είναι πιο γενικός και εφαρμόζεται παντού.

    Έφτιαξα ένα stored procedure που παίρνει ως input username & το hash του password και αν δεν υπάρχουν τα αποθηκεύει στη βάση. Όμως μάλλον κάτι κάνω λάθος στην αποθήκευση του hash γιατί δε μου επιστρέφει το σωστό μετά. Προσπαθώ να το αποθηκεύσω ως binary.

    VB.NET:

    Dim msConn As New SqlConnection("Data Source=.\SQLEXPRESS;Initial Catalog=sampledb;Integrated Security=True;")
    Dim mycmd As SqlCommand

    mycmd = New SqlCommand("AddUser", msConn)
    mycmd.CommandType = CommandType.StoredProcedure

    mycmd.Parameters.Add("@UserName", SqlDbType.NVarChar).Value = txtUserName.Text
    mycmd.Parameters.Add("@Password", SqlDbType.Binary).Value = Hash(txtInput.Text)

    mycmd.Connection.Open()
    mycmd.ExecuteNonQuery()
    mycmd.Connection.Close()


    H Function Hash(ByVal str as String) As Byte() παίρνει το password σε String και επιστρέφει το hash σε Byte Array...

    Πώς μπορώ να περάσω σωστά το binary στον SQL Server?
  •  10-04-2008, 03:36 41455 σε απάντηση της 41454

    Απ: Encrypt Password Field

    Ντροπή μου! Embarrassed Τελικά είχα ξεχάσει ένα μέγεθος μεταβλητής στο Stored Procedure. Έτσι ο SQL Server της έδινε (το default υποθέτω) μέγεθος 1, και προφανώς 20 bytes ήταν αδύνατο να ισούνται με 1 Stick out tongue.... Ο παραπάνω κώδικας είναι σωστός και τον αφήνω ενδεικτικά μήπως το χρειαστεί κάποιος μελλοντικά!

    Και μερικές ερωτήσεις:

    Για το verification κάνω τη σύγκριση των hashes μέσα στο Stored Procedure και επιστρέφω 0 ή 1 ανάλογα αν είναι επιτυχής ή όχι. Μπορώ να κάνω κάτι καλύτερο?

    Έχει σημασία ποιον αλγόριθμο κωδικοποίησης χρησιμοποιήσω? Πώς κατατάσσονται απο πλευράς ασφάλειας?



Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems