❮ Php TÀI LIỆU THAM KHẢO
Định nghĩa và cách sử dụng
Hàm uniqid [] tạo ra một id duy nhất dựa trên microtime [thời gian hiện tại tính bằng micro giây].
Lưu ý: ID được tạo từ hàm này không đảm bảo tính duy nhất của giá trị trả về! Để tạo ra một cực kỳ khó dự đoán ID, hãy sử dụng hàm md5 []. The generated ID from this function does not guarantee uniqueness of the return value! To generate an extremely difficult to predict ID, use the md5[] function.
Cú pháp
uniqid [tiền tố, more_entropy]
Giá trị tham số
tiếp đầu ngữ | Không bắt buộc. Chỉ định một tiền tố cho ID duy nhất [hữu ích nếu hai tập lệnh tạo ID chính xác cùng một micro giây] |
More_entropy | Không bắt buộc. Chỉ định thêm entropy ở cuối giá trị trả về. Điều này sẽ làm cho kết quả độc đáo hơn. Khi được đặt thành true, chuỗi trả về sẽ là 23 ký tự. Mặc định là sai và chuỗi trả về sẽ dài 13 ký tự |
Chi tiết kỹ thuật
Trả về định danh duy nhất, dưới dạng chuỗi |
4+ |
Tham số tiền tố đã trở thành tùy chọn trong PHP 5.0. Giới hạn dài 114 ký tự cho tiền tố đã được nâng lên trong PHP 4.3.1. The limit of 114 characters long for prefix was raised in PHP 4.3.1. |
❮ Php TÀI LIỆU THAM KHẢO
Hình ảnh Scott-Cartwright/Getty Cập nhật vào ngày 02 tháng 10 năm 2018 Một ID người dùng duy nhất có thể được tạo trong PHP bằng hàm uniqid []. Hàm này có hai tham số & nbsp; bạn có thể đặt. Đầu tiên là tiền tố, đó là những gì sẽ được thêm vào đầu mỗi ID. Thứ hai là nhiều hơn_entropy. Nếu điều này là sai hoặc không được chỉ định, nó sẽ trả về 13 ký tự; Nếu đó là & nbsp; đúng, 23 ký tự sẽ được trả lại. Dưới đây là các ví dụ về việc tạo một ID người dùng duy nhất, nhưng mỗi cái hơi khác nhau. Đầu tiên tạo ra một ID duy nhất bình thường trong khi lần thứ hai cho thấy cách tạo ID dài hơn. Ví dụ thứ ba tạo một ID có số ngẫu nhiên là tiền tố trong khi dòng cuối cùng có thể được sử dụng để mã hóa tên người dùng trước khi lưu trữ nó. Ví dụ để tạo một ID duy nhất
//creates a unique id with the 'about' prefix $a = uniqid[about]; echo $a; echo "
";
//creates a longer unique id with the 'about' prefix $b = uniqid [about, true]; Echo $b; echo "
";
//creates a unique ID with a random number as a prefix - more secure than a static prefix $c = uniqid [rand [],true]; echo $c; echo "
";
//this md5 encrypts the username from above, so its ready to be stored in your database $md5c = md5[$c]; echo $md5c; ?>
Thư viện tiêu chuẩn PHP 7 cung cấp chức năng
$bytes = random_bytes[20];
var_dump[bin2hex[$bytes]];
8 tạo ra các byte giả ngẫu nhiên bảo mật bằng mã hóa.Example:
$bytes = random_bytes[20];
var_dump[bin2hex[$bytes]];
Ví dụ trên sẽ xuất ra một cái gì đó tương tự như:
string[40] "5fe69c95ed70a9869d9f9af7d8400a6673bb9ce9"
Thông tin thêm: //php.net/manual/en/function.random-bytes.php
Php 5 [lỗi thời]
Tôi chỉ đang xem xét cách giải quyết vấn đề tương tự này, nhưng tôi cũng muốn chức năng của mình tạo ra một mã thông báo có thể được sử dụng để truy xuất mật khẩu. Điều này có nghĩa là tôi cần giới hạn khả năng của mã thông báo được đoán. Bởi vì
$bytes = random_bytes[20];
var_dump[bin2hex[$bytes]];
9 dựa trên thời gian và theo php.net "giá trị trả về ít khác với microtime []", $bytes = random_bytes[20];
var_dump[bin2hex[$bytes]];
9 không đáp ứng các tiêu chí. PHP khuyến nghị sử dụng string[40] "5fe69c95ed70a9869d9f9af7d8400a6673bb9ce9"
1 thay vào đó để tạo mã thông báo bảo mật mật mã.Một câu trả lời nhanh chóng, ngắn và đến điểm là:
bin2hex[openssl_random_pseudo_bytes[$bytes]]
sẽ tạo ra một chuỗi ngẫu nhiên các ký tự chữ và số có độ dài = $ byte * 2. Thật không may, điều này chỉ có bảng chữ cái là
string[40] "5fe69c95ed70a9869d9f9af7d8400a6673bb9ce9"
2, nhưng nó hoạt động.Dưới đây là chức năng mạnh nhất mà tôi có thể làm cho điều đó đáp ứng các tiêu chí [đây là phiên bản được triển khai của câu trả lời của Erik].
function crypto_rand_secure[$min, $max]
{
$range = $max - $min;
if [$range < 1] return $min; // not so random...
$log = ceil[log[$range, 2]];
$bytes = [int] [$log / 8] + 1; // length in bytes
$bits = [int] $log + 1; // length in bits
$filter = [int] [1 $range];
return $min + $rnd;
}
function getToken[$length]
{
$token = "";
$codeAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$codeAlphabet.= "abcdefghijklmnopqrstuvwxyz";
$codeAlphabet.= "0123456789";
$max = strlen[$codeAlphabet]; // edited
for [$i=0; $i < $length; $i++] {
$token .= $codeAlphabet[crypto_rand_secure[0, $max-1]];
}
return $token;
}
string[40] "5fe69c95ed70a9869d9f9af7d8400a6673bb9ce9"
3 hoạt động như một sự sụt giảm trong thay thế cho string[40] "5fe69c95ed70a9869d9f9af7d8400a6673bb9ce9"
4 hoặc string[40] "5fe69c95ed70a9869d9f9af7d8400a6673bb9ce9"
5. Nó sử dụng openSSL_random_pseudo_bytes để giúp tạo một số ngẫu nhiên giữa $ min và $ max.string[40] "5fe69c95ed70a9869d9f9af7d8400a6673bb9ce9"
6 tạo bảng chữ cái để sử dụng trong mã thông báo và sau đó tạo một chuỗi độ dài string[40] "5fe69c95ed70a9869d9f9af7d8400a6673bb9ce9"
7.Nguồn: //us1.php.net/manual/en/function.openssl-random-pseudo-byte.php#104322
Gagarine
4.0122 Huy hiệu vàng29 Huy hiệu bạc39 Huy hiệu đồng2 gold badges29 silver badges39 bronze badges
Đã trả lời ngày 5 tháng 12 năm 2012 lúc 22:25Dec 5, 2012 at 22:25
ScottscottScott
11.8K4 Huy hiệu vàng27 Huy hiệu bạc48 Huy hiệu đồng4 gold badges27 silver badges48 bronze badges
30
Thông báo bảo mật: Giải pháp này không nên được sử dụng trong các tình huống mà chất lượng của tính ngẫu nhiên của bạn có thể ảnh hưởng đến bảo mật của một ứng dụng. Cụ thể,
4 vàstring[40] "5fe69c95ed70a9869d9f9af7d8400a6673bb9ce9"
9 không phải là bộ tạo số ngẫu nhiên bảo mật bằng mã hóa. Xem câu trả lời của Scott để biết thay thế an toàn.: This solution should not be used in situations where the quality of your randomness can affect the security of an application. In particular,string[40] "5fe69c95ed70a9869d9f9af7d8400a6673bb9ce9"
4 andstring[40] "5fe69c95ed70a9869d9f9af7d8400a6673bb9ce9"
9 are not cryptographically secure random number generators. See Scott's answer for a secure alternative.string[40] "5fe69c95ed70a9869d9f9af7d8400a6673bb9ce9"
Nếu bạn không cần nó hoàn toàn độc đáo theo thời gian:
bin2hex[openssl_random_pseudo_bytes[$bytes]]
0Mặt khác [cho bạn đã xác định một đăng nhập duy nhất cho người dùng của bạn]:
md5[uniqid[$your_user_login, true]]
Đã trả lời ngày 4 tháng 12 năm 2009 lúc 10:55Dec 4, 2009 at 10:55
Loletechloletechloletech
3.6621 Huy hiệu vàng14 Huy hiệu bạc3 Huy hiệu đồng1 gold badge14 silver badges3 bronze badges
6
Phiên bản hướng đối tượng của giải pháp được bỏ phiếu nhiều nhất
Tôi đã tạo một giải pháp hướng đối tượng dựa trên câu trả lời của Scott:Scott's answer: