Συνάρτηση crypt() του PHP

Ορισμός και χρήση

Η συνάρτηση crypt() επιστρέφει τη συμβολοσειρά που κρυπτογράφηκε με τους αλγορίθμους DES, Blowfish ή MD5.

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

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

Εδώ υπάρχουν μερικά σταθερά που χρησιμοποιούνται με τη συνάρτηση crypt(). Οι τιμές των σταθερών ορίζονται κατά την εγκατάσταση από το PHP.

Σταθερά:

[CRYPT_SALT_LENGTH] Προεπιλεγμένη μήκος κρυπτογράφησης. Χρησιμοποιείται ο τυποποιημένος αλγόριθμος DES, η μήκος είναι 2.
[CRYPT_STD_DES] Χάος υπολογισμού βασισμένο στον τυποποιημένο αλγόριθμο DES χρησιμοποιεί δύο χαρακτήρες από τους χαρακτήρες "./0-9A-Za-z" ως χάος. Η χρήση μη νόμιμων χαρακτήρων στο χάος προκαλεί αποτυχία του crypt().
[CRYPT_EXT_DES] Εκτεταμένη χάος υπολογισμού βασισμένη στον αλγόριθμο DES. Το χάος είναι μια αλφαβητική αλυσίδα 9 χαρακτήρων, αποτελείται από μια κόσμηση και 4 δισεκατομμύρια επαναλήψεις και 4 δισεκατομμύρια χαρακτήρες χάους. Είναι κωδικοποιημένα σε εκτυπώσιμα χαρακτήρες, κάθε χαρακτήρας 6 ψηφία, οι χαρακτήρες με λιγότερους αποτελεσματικούς ψηφίους προτιμάται. 0 έως 63 κωδικοποιούνται ως "./0-9A-Za-z". Η χρήση μη νόμιμων χαρακτήρων στο χάος προκαλεί αποτυχία του crypt().
[CRYPT_MD5] Η χρωματογράφηση MD5 χρησιμοποιεί μια αλφαβητική ακολουθία σάλτ 12 χαρακτήρων που ξεκινά με το $1$.
[CRYPT_BLOWFISH] Η αλγόριθμος Blowfish χρησιμοποιεί την εξής σάλτ: "$2a$", ένας δυadicτικός παράμετρος cost, "$" και μια αλφαβητική ακολουθία 64 χαρακτήρων που αποτελείται από χαρακτήρες από το "./0-9A-Za-z". Η χρήση χαρακτήρων εκτός αυτού του εύρους στην σάλτ θα οδηγήσει στην επιστροφή ενός κενού αλφαβητικής ακολουθίας από την συνάρτηση crypt(). Οι δυadicτικοί παράμετροι cost είναι το λόγο της επαναλήψεων με βάση το 2, ο οποίος έχει εύρος 04-31. Η υπερβολή αυτού του εύρους θα οδηγήσει στην αποτυχία της κωδικοποίησης.
CRYPT_SHA256 Η αλγόριθμος SHA-256 χρησιμοποιεί μια αλφαβητική ακολουθία σάλτ 16 χαρακτήρων που ξεκινά με το $5$. Αν η αλφαβητική ακολουθία σάλτ ξεκινά με "rounds=<N>$", η αριθμητική τιμή του N χρησιμοποιείται για να καθορίσει τον αριθμό των επαναλήψεων της χρωματογράφησης, κάτι που μοιάζει με τον παράμετρο cost της αλγόριθμου Blowfish. Η προεπιλεγμένη επαναλήψη είναι 5000, το ελάχιστο είναι 1000 και το μέγιστο είναι 999,999,999. Η τιμή του N που υπερβαίνει αυτό το όριο θα μετατραπεί σε την πλησιέστερη τιμή.
CRYPT_SHA512 Η αλγόριθμος SHA-512 χρησιμοποιεί μια αλφαβητική ακολουθία σάλτ 16 χαρακτήρων που ξεκινά με το $6$. Αν η αλφαβητική ακολουθία σάλτ ξεκινά με "rounds=<N>$", η αριθμητική τιμή του N χρησιμοποιείται για να καθορίσει τον αριθμό των επαναλήψεων της χρωματογράφησης, κάτι που μοιάζει με τον παράμετρο cost της αλγόριθμου Blowfish. Η προεπιλεγμένη επαναλήψη είναι 5000, το ελάχιστο είναι 1000 και το μέγιστο είναι 999,999,999. Η τιμή του N που υπερβαίνει αυτό το όριο θα μετατραπεί σε την πλησιέστερη τιμή.

Συστήματα που υποστηρίζουν πολλαπλές αλγορίθμους κρυπτογράφησης, αν υποστηρίζονται οι παραπάνω μόνιμες τιμές, ορίζονται ως "1", αλλιώς ως "0".

Σημειώσεις:Δεν υπάρχει αντίστοιχη συνάρτηση αποκρυπτογράφησης. Η συνάρτηση crypt() χρησιμοποιεί μια μονοδρομική αλγόριθμο.

Γραμματική:

crypt(str,σάλτ)
Παράμετροι Περιγραφή
str Απαιτείται. Καθορίζει την αλφαβητική ακολουθία που πρέπει να κωδικοποιηθεί.
σάλτ Προαιρετικό. Χρησιμοποιείται για να αυξήσει τον αριθμό των κωδικοποιημένων χαρακτήρων, ώστε η κωδικοποίηση να είναι πιο ασφαλής. Αν δεν παρέχεται ο παράμετρος σάλτ, η PHP δημιουργεί τυχαία ένα σάλτ κάθε φορά που καλείται η συνάρτηση.

Τεχνικά Στοιχεία

Αποτελεσματική τιμή: Επιστρέφει τη κρυπτογραφημένη αλφαβητική ακολουθία ή μια αλφαβητική ακολουθία με λιγότερους από 13 χαρακτήρες, ώστε να διακρίνεται από το σάλτ στην περίπτωση αποτυχίας.
PHP Έκδοση: 4+

更新日志

Έdition Περιγραφή
5.3.2 Βασισμένος στην υλοποίηση του Ulrich Drepper, προστέθηκε η υλοποίηση crypt για τους αλγορίθμους SHA-256 και SHA-512.
5.3.2 Διόρθωσε το πρόβλημα του αλγορίθμου Blowfish που προκαλείται από μη νόμιμους κύκλους, επιστρέφοντας τη συμβολοσειρά "αποτυχία" ("*0" ή "*1") αντί να χρησιμοποιήσει τον αλγόριθμο DES.
5.3.0 Το PHP περιλαμβάνει την δική του υλοποίηση MD5 Crypt, συμπεριλαμβανομένων των αλγορίθμων Standard DES, Extended DES και Blowfish. Αν το σύστημα λείπει η υλοποίηση, το PHP θα χρησιμοποιήσει την δική του υλοποίηση.

Επίδειξη

Παράδειγμα 1

Σε αυτή την παράδειγμα, θα δοκιμάσουμε διαφορετικές μεθόδους:

<?php
// 2 χαρακτήρες salt
if (CRYPT_STD_DES == 1)
{
echo "Standard DES: ".crypt('something','st')."\n<br>";
}
else
{
echo "Standard DES not supported.\n<br>";
}
// 4 χαρακτήρες salt
if (CRYPT_EXT_DES == 1)
{
echo "Extended DES: ".crypt('something','_S4..some')."\n<br>";
}
else
{
echo "Extended DES not supported.\n<br>";
}
// ξεκινώντας με $1$ 12 χαρακτήρες
if (CRYPT_MD5 == 1)
{
echo "MD5: ".crypt('something','$1$somethin$')."\n<br>";
}
else
{
echo "MD5 not supported.\n<br>";
}
// Salt ξεκινώντας με $2a$. Δις αριθμητικός παράμετρος κόστους: 09. 22 χαρακτήρες
if (CRYPT_BLOWFISH == 1)
{
echo "Blowfish: ".crypt('something','$2a$09$anexamplestringforsalt$')."\n<br>";
}
else
{
echo "Blowfish DES not supported.\n<br>";
}
// 以 $5$ 开头的 16 字符 salt。默认的轮数是 5000。
if (CRYPT_SHA256 == 1)
{
echo "SHA-256: ".crypt('something','$5$rounds=5000$anexamplestringforsalt$')."\n<br>";
else
{
echo "SHA-256 not supported.\n<br>";
}
// 以 $5$ 开头的 16 字符 salt。默认的轮数是 5000。
if (CRYPT_SHA512 == 1)
{
echo "SHA-512: ".crypt('something','$6$rounds=5000$anexamplestringforsalt$');
}
else
{
echo "SHA-512 not supported.";
}
?>

上述代码的输出(取决于操作系统):

Standard DES: stqAdD7zlbByI
Extended DES: _S4..someQXidlBpTUu6
MD5: $1$somethin$4NZKrUlY6r7K7.rdEOZ0w.
Blowfish: $2a$09$anexamplestringforsaleLouKejcjRlExmf1671qw3Khl49R3dfu
SHA-256: $5$rounds=5000$anexamplestringf$KIrctqsxo2wrPg5Ag/hs4jTi4PmoNKQUGWFXlVy9vu9
SHA-512: $6$rounds=5000$anexamplestringf$Oo0skOAdUFXkQxJpwzO05wgRHG0dhuaPBaOU/
oNbGpCEKlf/7oVM5wn6AN0w2vwUgA0O24oLzGQpp1XKI6LLQ0.