Προγραμματισμός

Γνώση Υπολογιστών >> Προγραμματισμός >  >> Προγραμματισμός Ruby

Τι είναι το hash και πώς χρησιμοποιήθηκε στον προγραμματισμό;

Τι είναι ένα hash;

Στο πλαίσιο της επιστήμης και του προγραμματισμού των υπολογιστών, ένας κατακερματισμός (επίσης γνωστός ως κώδικας κατακερματισμού, τιμή κατακερματισμού ή digest μηνύματος) είναι μια αριθμητική αναπαράσταση σταθερού μεγέθους των δεδομένων εισόδου του αυθαίρετου μεγέθους. Σκεφτείτε το ως δακτυλικό αποτύπωμα για ένα κομμάτι δεδομένων.

Η διαδικασία δημιουργίας ενός hash ονομάζεται hashing , και εκτελείται από μια λειτουργία Hash .

Βασικά χαρακτηριστικά των λειτουργιών κατακερματισμού:

* ντετερμινιστική: Για τα ίδια δεδομένα εισόδου, η λειτουργία κατακερματισμού θα παράγει πάντα την ίδια τιμή κατακερματισμού.

* μονόδρομος (ιδανικά): Θα πρέπει να είναι υπολογιστικά ανθεκτικό να αντιστραφεί η λειτουργία κατακερματισμού για να προσδιοριστεί η αρχική είσοδος από την τιμή κατακερματισμού. (Αυτό είναι πιο κρίσιμο για τις λειτουργίες κρυπτογραφικού κατακερματισμού.)

* Έξοδος σταθερού μεγέθους: Ανεξάρτητα από το μέγεθος των δεδομένων εισόδου, η συνάρτηση κατακερματισμού δημιουργεί μια τιμή κατακερματισμού ενός συγκεκριμένου, προκαθορισμένου μεγέθους (π.χ. 32 bits, 64 bits, 256 bits).

* Αντίσταση σύγκρουσης (ιδανικά): Μια καλή λειτουργία κατακερματισμού θα πρέπει να ελαχιστοποιεί την πιθανότητα διαφορετικών εισροών που παράγουν την ίδια τιμή κατακερματισμού (μια "σύγκρουση"). Ενώ οι συγκρούσεις είναι αναπόφευκτες, θα πρέπει να είναι σπάνιες.

αναλογία:

Φανταστείτε ότι έχετε ένα έγγραφο (τα δεδομένα εισόδου). Μια συνάρτηση κατακερματισμού είναι σαν ένα μηχάνημα που συνοψίζει αυτό το έγγραφο σε μια σύντομη, σταθερή περίληψη (η τιμή hash). Η περίληψη πρέπει να είναι:

* συνεπής: Το ίδιο έγγραφο παράγει πάντα την ίδια περίληψη.

* μοναδικό (όσο το δυνατόν περισσότερο): Τα διαφορετικά έγγραφα θα πρέπει να παράγουν ιδανικά διαφορετικές περιλήψεις.

* μη αναστρέψιμο (ιδανικά): Δεν μπορείτε να αναδημιουργήσετε το αρχικό έγγραφο μόνο από τη σύνοψη του.

Πώς χρησιμοποιούνται τα hashes στον προγραμματισμό

Το Hashes έχει πολλές εφαρμογές στον προγραμματισμό και τις δομές δεδομένων:

1. Δομές δεδομένων (πίνακες κατακερματισμού/χάρτες κατακερματισμού):

* Αυτή είναι η πιο συνηθισμένη χρήση. Οι πίνακες hash χρησιμοποιούνται για αποτελεσματική αποθήκευση και ανάκτηση δεδομένων με βάση τα πλήκτρα.

* Πώς λειτουργεί: Μια συνάρτηση hash μετατρέπει το κλειδί σε ένα δείκτη (τιμή κατακερματισμού) μέσα σε έναν πίνακα. Η τιμή που σχετίζεται με το κλειδί αποθηκεύεται σε αυτόν τον δείκτη.

* Οφέλη: Παρέχει πολύ γρήγορη κατάσταση αναζήτησης μέσου όρου (O (1) πολυπλοκότητα) επειδή ο δείκτης υπολογίζεται απευθείας από το κλειδί.

* Παράδειγμα: Τα λεξικά στην Python, χάρτες στη Java, αντικρούουν ως συσχετιστικές συστοιχίες στο JavaScript.

`` `Python

Λεξικό Python (Εφαρμογή πίνακα κατακερματισμού)

my_dict ={"Apple":1, "μπανάνα":2, "πορτοκαλί":3}

εκτύπωση (my_dict ["apple"]) # τιμή πρόσβασης χρησιμοποιώντας το κλειδί "apple" - o (1) Μέση ώρα

`` `

2. Επαλήθευση ακεραιότητας δεδομένων:

* Τα hashes μπορούν να χρησιμοποιηθούν για να διασφαλιστεί ότι τα δεδομένα δεν έχουν παραβιαστεί κατά τη διάρκεια της μετάδοσης ή της αποθήκευσης.

* Πώς λειτουργεί: Υπολογίστε το hash των δεδομένων πριν την αποστείλετε ή αποθηκεύστε το. Αργότερα, υπολογίστε εκ νέου το hash και το συγκρίνετε με την αρχική τιμή κατακερματισμού. Εάν η αντιστοίχιση των hashes, τα δεδομένα είναι πιθανώς αμετάβλητα.

* Παράδειγμα: Checksums, επαλήθευση ακεραιότητας αρχείων σε λήψεις λογισμικού, ανίχνευση κατεστραμμένων δεδομένων σε βάσεις δεδομένων.

`` `Python

Εισαγωγή hashlib

δεδομένα ="Αυτά είναι τα δεδομένα μου."

hash_object =hashlib.md5 (data.encode ()) #encode μετατρέπει τη συμβολοσειρά σε bytes

md5_hash =hash_object.hexdigest ()

εκτύπωση (F "MD5 Hash:{MD5_HASH}")

`` `

3. Αποθήκευση κωδικού πρόσβασης:

* Η αποθήκευση κωδικών πρόσβασης απευθείας σε μια βάση δεδομένων αποτελεί κίνδυνο ασφαλείας. Τα hashes χρησιμοποιούνται για την αποθήκευση μιας μονής διαδρομής του κωδικού πρόσβασης.

* Πώς λειτουργεί: Όταν ένας χρήστης δημιουργεί έναν λογαριασμό, ο κωδικός πρόσβασης είναι χαστούκι (συνήθως με ένα "αλάτι" - μια τυχαία συμβολοσειρά που προστίθεται στον κωδικό πρόσβασης πριν από το hashing). Το hash αποθηκεύεται, όχι ο πραγματικός κωδικός πρόσβασης. Όταν συνδεθεί ο χρήστης, ο κωδικός πρόσβασης που έχει εισαχθεί είναι επίσης κατακερματισμένος (με το ίδιο αλάτι) και ο προκύπτων κατακερματισμός συγκρίνεται με το αποθηκευμένο hash.

* Οφέλη: Ακόμη και αν η βάση δεδομένων διακυβεύεται, οι επιτιθέμενοι δεν μπορούν να ανακτήσουν απευθείας τους κωδικούς πρόσβασης.

* Σκέψεις ασφαλείας: Οι σύγχρονοι αλγόριθμοι κατακερματισμού κωδικών πρόσβασης (όπως το BCrypt, το Scrypt, το Argon2) είναι σκόπιμα αργή και χρησιμοποιούν άλατα για να τους κάνουν ανθεκτικά σε επιθέσεις βίαιης δύναμης και επιθέσεις τραπεζιού ουράνιου τόξου.

`` `Python

Εισαγωγή bcrypt

κωδικός πρόσβασης =b "my_secret_password" # κωδικός πρόσβασης ως bytes

Δημιουργήστε ένα αλάτι

αλάτι =bcrypt.gensalt ()

Hash Ο κωδικός πρόσβασης με το αλάτι

hashed_password =bcrypt.hashpw (κωδικός πρόσβασης, αλάτι)

εκτύπωση (F "Hashed κωδικός πρόσβασης:{hashed_password}")

Για να επαληθεύσετε τον κωδικό πρόσβασης αργότερα:

Entered_Password =b "my_secret_password"

Εάν bcrypt.checkpw (entered_password, hashed_password):

εκτύπωση ("Αντιστοίχιση κωδικού πρόσβασης!")

αλλού:

εκτύπωση ("Ο κωδικός πρόσβασης δεν ταιριάζει.")

`` `

4. Προσωρινή αποθήκευση:

* Τα hashes μπορούν να χρησιμοποιηθούν για τη δημιουργία πλήκτρων προσωρινής μνήμης για την αποθήκευση των αποτελεσμάτων των ακριβών υπολογισμών.

* Πώς λειτουργεί: Οι παραμέτρους εισόδου σε μια συνάρτηση (ή η κατάσταση ενός συστήματος) είναι χαστούκια και η τιμή κατακερματισμού χρησιμοποιείται ως κλειδί σε μια προσωρινή μνήμη (όπως ένας πίνακας κατακερματισμού). Εάν η ίδια είσοδος συναντιέται ξανά, το αποθηκευμένο αποτέλεσμα μπορεί να ανακτηθεί άμεσα, αποφεύγοντας την ανασυγκρότηση.

* Παράδειγμα: Σημείωση, προσωρινή αποθήκευση συχνά πρόσβαση σε δεδομένα σε εφαρμογές ιστού.

5. Deduplication δεδομένων:

* Τα hashes μπορούν να χρησιμοποιηθούν για τον εντοπισμό διπλών στοιχείων δεδομένων.

* Πώς λειτουργεί: Όταν πρόκειται να αποθηκευτούν νέα δεδομένα, υπολογίζεται ο κατακερματισμός του. Εάν το hash υπάρχει ήδη σε μια βάση δεδομένων γνωστών hashes, τα δεδομένα είναι πιθανό αντίγραφο και μπορούν να παραλειφθούν (ή να αποθηκευτούν μόνο μία φορά).

* Παράδειγμα: Συστήματα αποθήκευσης, Υπηρεσίες κοινής χρήσης αρχείων.

6. Φίλτρα άνθισης:

* Πιθανές δομές δεδομένων που χρησιμοποιούν το hashing για να ελέγξουν αν ένα στοιχείο είναι μέλος ενός συνόλου. Τα φίλτρα Bloom μπορούν να έχουν ψευδώς θετικά (θα μπορούσαν να πουν ότι ένα στοιχείο είναι στο σετ όταν δεν είναι), αλλά ποτέ δεν έχουν ψευδώς αρνητικά (δεν θα πουν ποτέ ότι ένα στοιχείο δεν είναι στο σετ αν είναι).

7. Κρυπτογραφία:

* Οι λειτουργίες κρυπτογραφικού κατακερματισμού (SHA-256, SHA-3, κλπ.) Χρησιμοποιούνται για διάφορους σκοπούς ασφαλείας, όπως:

* Ψηφιακές υπογραφές:Δημιουργία ενός εγγράφου και στη συνέχεια κρυπτογραφώντας το hash με ένα ιδιωτικό κλειδί.

* Κωδικοί ελέγχου ταυτότητας μηνυμάτων (Macs):Δημιουργία κατακερματισμού που εξαρτάται από ένα μυστικό κλειδί, που χρησιμοποιείται για την επαλήθευση τόσο της ακεραιότητας όσο και της αυθεντικότητας.

* Cryptocurrencies:Το Hashing είναι θεμελιώδες για την τεχνολογία blockchain για τη δημιουργία μπλοκ και την επαλήθευση των συναλλαγών.

Κοινή λειτουργία κατακερματισμού

Υπάρχουν πολλές διαφορετικές λειτουργίες κατακερματισμού. Ακολουθούν μερικά παραδείγματα:

* MD5 (Message Digest 5): (Αποσπάσματα για εφαρμογές ευαίσθητων στην ασφάλεια, επειδή είναι ευάλωτη σε συγκρούσεις). Δημιουργεί ένα hash 128-bit.

* sha-1 (αλγόριθμος ασφαλείας hash 1): (Επίσης, καταργήθηκε για εφαρμογές ευαίσθητου στην ασφάλεια λόγω τρωτών σημείων). Δημιουργεί ένα hash 160 bit.

* SHA-2 (Ασφαλής Αλγόριθμος Χασάρης 2): Μια οικογένεια λειτουργιών κατακερματισμού, συμπεριλαμβανομένου του SHA-256 (Hash 256-bit), του SHA-384 (384-bit hash) και του Sha-512 (hash 512 bit). Γενικά θεωρείται πιο ασφαλής από τα MD5 και SHA-1.

* SHA-3 (αλγόριθμος ασφαλείας Hash 3): Μια διαφορετική οικογένεια λειτουργιών κατακερματισμού που επιλέγονται σε ανταγωνισμό NIST. Προσφέρει διαφορετικό σχεδιασμό από το Sha-2.

* Bcrypt, Scrypt, Argon2: Οι αλγόριθμοι hashing κωδικού πρόσβασης που έχουν σχεδιαστεί για να είναι αργοί και ανθεκτικοί στις επιθέσεις. Αυτές δεν είναι γενικές λειτουργίες κατακερματισμού. Είναι ειδικά για αποθήκευση κωδικού πρόσβασης.

* Murmurhash, FNV hash: Οι μη κρυπτογραφικές λειτουργίες κατακερματισμού χρησιμοποιούνται συχνά για υλοποιήσεις πίνακα κατακερματισμού όπου η ταχύτητα είναι σημαντική.

Σημαντικές εκτιμήσεις

* συγκρούσεις: Οι συγκρούσεις είναι αναπόφευκτες, ειδικά όταν ασχολούνται με μεγάλα σύνολα δεδομένων. Οι καλές υλοποιήσεις πίνακα κατακερματισμού έχουν στρατηγικές επίλυσης σύγκρουσης (π.χ. ξεχωριστή αλυσίδα, ανοιχτή διευθύνσεις) για να χειριστούν αποτελεσματικά τις συγκρούσεις.

* Επιλογή λειτουργίας κατακερματισμού: Η επιλογή της λειτουργίας κατακερματισμού εξαρτάται από την εφαρμογή. Για εφαρμογές ευαίσθητων στην ασφάλεια, χρησιμοποιήστε τις λειτουργίες κρυπτογραφικού κατακερματισμού. Για πίνακες κατακερματισμού, επιλέξτε μια λειτουργία κατακερματισμού που διανέμει πλήκτρα ομοιόμορφα σε ολόκληρο τον πίνακα για να ελαχιστοποιήσετε τις συγκρούσεις.

* Ασφάλεια: Εάν χρησιμοποιείτε hashes για ασφάλεια (αποθήκευση κωδικού πρόσβασης, ακεραιότητα δεδομένων), χρησιμοποιήστε ισχυρές, σύγχρονες κρυπτογραφικές λειτουργίες κατακερματισμού (BCrypt, Argon2, SHA-256, SHA-3) και κατάλληλες τεχνικές αλάτια. Αποφύγετε τη χρήση MD5 ή SHA-1 για ασφάλεια.

* απόδοση: Οι λειτουργίες hash ποικίλλουν στις επιδόσεις τους. Προφίλ Ο κωδικός σας για να προσδιορίσετε εάν η διαδικασία κατακερματισμού είναι μια συμφόρηση και επιλέξτε μια κατάλληλη λειτουργία κατακερματισμού για τις ανάγκες σας.

Συνοπτικά, ένα hash είναι ένα πολύτιμο εργαλείο στον προγραμματισμό, παρέχοντας έναν τρόπο να αντιπροσωπεύει δεδομένα σε μια συμπαγή μορφή σταθερού μεγέθους για αποτελεσματικές δομές δεδομένων, ελέγχους ακεραιότητας, ασφάλεια και διάφορες άλλες εφαρμογές. Η επιλογή της σωστής λειτουργίας κατακερματισμού και των συγκρούσεων χειρισμού είναι αποτελεσματικά σημαντική για την επίτευξη της βέλτιστης απόδοσης και ασφάλειας.

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα