Hướng dẫn how to generate random unique id in php? - làm thế nào để tạo id duy nhất ngẫu nhiên trong php?

Thư viện tiêu chuẩn PHP 7 cung cấp chức năng

md5[uniqid[$your_user_login, true]]
4 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ì

md5[uniqid[$your_user_login, true]]
5 dựa trên thời gian và theo php.net "giá trị trả về ít khác với microtime []",
md5[uniqid[$your_user_login, true]]
5 không đáp ứng các tiêu chí. PHP khuyến nghị sử dụng
md5[uniqid[$your_user_login, true]]
7 thay vào đó để tạo mã thông báo bảo mật bằng mã hóa.

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à

md5[uniqid[$your_user_login, true]]
8, 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;
}

md5[uniqid[$your_user_login, true]]
9 hoạt động như một sự sụt giảm trong thay thế cho

Bài Viết Liên Quan

Chủ Đề