Hàm PHP crypt()
❮ Tham chiếu chuỗi PHP
Định nghĩa và cách sử dụng
Hàm crypt() trả về một chuỗi băm bằng thuật toán DES, Blowfish hoặc MD5.
Chức năng này hoạt động khác nhau trên các hệ điều hành khác nhau. PHP kiểm tra những thuật toán nào có sẵn và những thuật toán nào sẽ sử dụng khi nó được cài đặt.
Tham số muối là tùy chọn. Tuy nhiên, crypt() tạo mật khẩu yếu mà không có muối. Đảm bảo chỉ định loại muối đủ mạnh để bảo mật tốt hơn.
Có một số hằng số được sử dụng cùng với hàm crypt(). Giá trị của các hằng số này được PHP đặt khi nó được cài đặt.
Hằng số:
- [CRYPT_STD_DES] - Hàm băm dựa trên DES tiêu chuẩn có hai ký tự muối từ bảng chữ cái "./0-9A-Za-z". Sử dụng các ký tự không hợp lệ trong muối sẽ khiến chức năng này bị lỗi.
- [CRYPT_EXT_DES] - Hàm băm dựa trên DES mở rộng với muối chín ký tự bao gồm dấu gạch dưới theo sau là 4 byte số lần lặp và 4 byte muối. Chúng được mã hóa dưới dạng các ký tự có thể in được, 6 bit cho mỗi ký tự, ký tự ít quan trọng nhất được đặt trước. Các giá trị từ 0 đến 63 được mã hóa thành "./0-9A-Za-z". Sử dụng các ký tự không hợp lệ trong muối sẽ khiến hàm bị lỗi.
- [CRYPT_MD5] - Băm MD5 bằng muối 12 ký tự bắt đầu bằng $1$
- [CRYPT_BLOWFISH] - Băm cá nóc bằng muối bắt đầu bằng $2a$, $2x$ hoặc $2y$, tham số chi phí gồm hai chữ số "$" và 22 ký tự từ bảng chữ cái "./0-9A-Za-z" . Việc sử dụng các ký tự bên ngoài bảng chữ cái sẽ khiến hàm này trả về một chuỗi có độ dài bằng 0. Tham số "$" là logarit cơ số 2 của số lần lặp cho trình thuật toán băm Blowfish-bashed cơ bản và phải nằm trong phạm vi 04-31. Các giá trị nằm ngoài phạm vi này sẽ khiến chức năng bị lỗi.
- [CRYPT_SHA_256] - Hàm băm SHA-256 với muối 16 ký tự bắt đầu bằng $5$. Nếu chuỗi muối bắt đầu bằng "rounds=<N>$", giá trị số của N được sử dụng để cho biết vòng lặp băm nên được thực thi bao nhiêu lần, giống như tham số chi phí trên Blowfish. Số vòng mặc định là 5000, tối thiểu là 1000 và tối đa là 999.999.999. Mọi lựa chọn N ngoài phạm vi này sẽ bị cắt bớt đến giới hạn gần nhất.
- [CRYPT_SHA_512] - Hàm băm SHA-512 với muối 16 ký tự bắt đầu bằng $6$. Nếu chuỗi muối bắt đầu bằng "rounds=<N>$", giá trị số của N được sử dụng để cho biết vòng lặp băm nên được thực thi bao nhiêu lần, giống như tham số chi phí trên Blowfish. Số vòng mặc định là 5000, tối thiểu là 1000 và tối đa là 999.999.999. Mọi lựa chọn N ngoài phạm vi này sẽ bị cắt bớt đến giới hạn gần nhất.
Trên các hệ thống có chức năng này hỗ trợ nhiều thuật toán, các hằng số ở trên được đặt thành "1" nếu được hỗ trợ và "0" nếu ngược lại.
Lưu ý: Không có chức năng giải mã. Hàm crypt() sử dụng thuật toán một chiều.
Cú pháp
crypt( str,salt )
Giá trị tham số
Parameter | Description |
---|---|
str | Required. Specifies the string to be hashed |
salt | Optional. A salt string to base the hashing on |
Chi tiết kỹ thuật
Giá trị trả về: | Trả về chuỗi được mã hóa hoặc một chuỗi ngắn hơn 13 ký tự và được đảm bảo khác với chuỗi muối khi thất bại |
---|---|
Phiên bản PHP: | 4+ |
Nhật ký thay đổi: | PHP 5.6.0 - Hiển thị cảnh báo bảo mật E_NOTICE nếu thiếu muối . PHP 5.3.7 - Đã thêm chế độ Blowfish $2x$ và $2y$. PHP 5.3.2 - Đã thêm SHA-256 và SHA-512. Đã sửa lỗi hành vi Blowfish trên các vòng không hợp lệ trả về chuỗi "thất bại" ("*0" hoặc "*1"), thay vì quay trở lại DES. PHP 5.3.0 - PHP hiện có triển khai riêng cho mật mã MD5, DES tiêu chuẩn, DES mở rộng và các thuật toán Blowfish và sẽ sử dụng điều đó nếu hệ thống thiếu hỗ trợ cho một hoặc nhiều thuật toán. |
Thêm ví dụ
Ví dụ
Trong ví dụ này, chúng tôi sẽ kiểm tra các thuật toán khác nhau:
<?php
// 2 character salt
if (CRYPT_STD_DES == 1 )
{
echo "Standard DES: " .crypt( 'something' , 'st' ). "\n<br>" ;
}
else
{
echo "Standard DES not supported.\n<br>" ;
}
// 4 character salt
if (CRYPT_EXT_DES == 1 )
{
echo "Extended DES: " .crypt( 'something' , '_S4..some' ). "\n<br>" ;
}
else
{
echo "Extended DES not supported.\n<br>" ;
}
// 12 character salt starting with $1$
if (CRYPT_MD5 == 1 )
{
echo "MD5: " .crypt( 'something' , '$1$somethin$' ). "\n<br>" ;
}
else
{
echo "MD5 not supported.\n<br>" ;
}
// Salt starting with $2a$. The two digit cost parameter: 09. 22 characters
if (CRYPT_BLOWFISH == 1 )
{
echo "Blowfish: " .crypt( 'something' , '$2a$09$anexamplestringforsalt$' ). "\n<br>" ;
}
else
{
echo "Blowfish DES not supported.\n<br>" ;
}
// 16 character salt starting with $5$. The default number of rounds is 5000.
if (CRYPT_SHA256 == 1 )
{
echo "SHA-256: " .crypt( 'something' , '$5$rounds=5000$anexamplestringforsalt$' ). "\n<br>" ; }
else
{
echo "SHA-256 not supported.\n<br>" ;
}
// 16 character salt starting with $6$. The default number of rounds is 5000.
if (CRYPT_SHA512 == 1 )
{
echo "SHA-512: " .crypt( 'something' , '$6$rounds=5000$anexamplestringforsalt$' );
}
else
{
echo "SHA-512 not supported." ;
}
?>
Đầu ra của đoạn mã trên có thể là (tùy thuộc vào hệ điều hành):
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.
❮ Tham chiếu chuỗi PHP