Forum und email

crypt

(PHP 4, PHP 5)

crypt — Μίας κατεύθυνσης κρυπτογράφηση string (hashing)

Περιγραφή

string crypt ( string $str [, string $salt ] )

Η συνάρτηση crypt() κρυπτογραφεί ένα string με τη χρήση του συνηθισμένου Unix DES-based αλγορίθμου κρυπτογράφησης ή άλλων αλγορίθμων που μπορεί να είναι διαθέσιμοι στο σύστημα. Τα ορίσματα είναι το προς κρυπτογράφηση string και ένα προαιρετικό salt string πάνω στο οποίο βασίζεται η κρυπτογράφηση. Για πληροφορίες σχετικά με τη συνάρτηση crypt, ανατρέξτε στην κατάλληλη man σελίδα του UNIX.

Εάν το όρισμα salt δε δίνεται, θα παραχθεί ένα τυχαίο από την PHP.

Κάποια λειτουργικά συστήματα υποστηρίζουν περισσότερους του ενός τύπους κρυπτογράφησης. Στην πραγματικότητα, μερικές φορές η συνηθισμένη DES-based κρυπτογράφηση αντικαθίσταται από έναν MD5-based αλγόριθμο κρυπτογράφησης. Ο τύπος της κρυπτογράφησης εξαρτάται από το όρισμα salt. Κατά τη διάρκεια της εγκατάστασης, η PHP προσδιορίζει τις δυνατότητες της συνάρτησης crypt και θα δεχθεί salts και για άλλους τύπους κρυπτογράφησης. Εάν δε δοθεί salt, η PHP θα παράξει αυτόματα ένα συνηθισμένο salt, δύο χαρακτήρων κατά προτίμηση, εκτός εάν ο προκαθορισμένος τύπος κρυπτογράφησης του συστήματος είναι ο MD5, οπότε και θα παραχθεί ένα τυχαίο, συμβατό με το MD5 salt. Η PHP δημιουργεί μία σταθερά με το όνομα CRYPT_SALT_LENGTH, η οποία ορίζει εάν θα εφαρμοσθεί στο σύστημά σας ένα συνηθισμένο salt δύο χαρακτήρων ή ένα μακρύτερο δώδεκα χαρακτήρων.

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

Η συνηθισμένη DES-based κρυπτογράφηση με τη συνάρτηση crypt() επιστρέφει το salt ως τους δύο πρώτους χαρακτήρες της εξόδου. Επίσης χρησιμοποιεί μόνο τους οχτώ πρώτους χαρακτήρες της παραμέτρου str , έτσι ώστε μεγαλύτερα strings που ξεκινούν από τους ίδιους οχτώ χαρακτήρες να παράγουν το ίδιο αποτέλεσμα (όταν χρησιμοποιείται το ίδιο salt).

Σε συστήματα όπου η συνάρτηση crypt() υποστηρίζει πολλαπλούς τύπους κρυπτογράφησης, οι ακόλουθες σταθερές τίθενται στο 0 ή στο 1 ανάλογα με το αν ο δοθέν τύπος είναι διαθέσιμος:

  • CRYPT_STD_DES - Συνηθισμένη DES-based κρυπτογράφηση με salt δύο χαρακτήρων
  • CRYPT_EXT_DES - Εκτεταμένη DES-based κρυπτογράφηση με salt εννέα χαρακτήρων
  • CRYPT_MD5 - MD5 κρυπτογράφηση με salt δώδεκα χαρακτήρων ξεκινώντας με $1$
  • CRYPT_BLOWFISH - Blowfish κρυπτογράφηση με salt δεκαέξι χαρακτήρων ξεκινώντας με $2$

Note: Δεν υπάρχει συνάρτηση αποκρυπτογράφησης, αφού η crypt() χρησιμοποιεί αλγόριθμο μίας κατεύθυνσης.

Example#1 Παράδειγμα χρήσης της crypt()

<?php
$password 
crypt("My1sTpassword"); # let salt be generated

# You should pass the entire results of crypt() as the salt for comparing a
# password, to avoid problems when different hashing algorithms are used. (As
# it says above, standard DES-based password hashing uses a 2-character salt,
# but MD5-based hashing uses 12.)
if (crypt($user_input,$password) == $password) {
   echo 
"Password verified!";
}
?>

Ανατρέξτε επίσης στη συνάρτηση md5() και στην ενότητα η Mcrypt επέκταση.