Cụm từ viết tắt CSPRNG có nghĩa là Bộ sinh số ngẫu nhiên giả lập an toàn về mặt mật mã. Thư viện hàm của PHP bao gồm nhiều hàm tạo ra số ngẫu nhiên. Ví dụ −
mt_rand() − Tạo một giá trị ngẫu nhiên thông qua Bộ sinh số ngẫu nhiên Mersenne Twister.
mt_srand() − Gieo hạt cho Bộ sinh số ngẫu nhiên Mersenne Twister
rand() − Tạo một số nguyên ngẫu nhiên.
Đoạn mã sau đây cho thấy cách bạn có thể sử dụng hàm mt_rand() để tạo ra số ngẫu nhiên −
<?php # Generates random integer between the range echo "Random integer: " . rand(1,100) . PHP_EOL; # Generate a random value via the Mersenne Twister Random Number Generator echo "Random number: " . mt_rand(1,100); ?>
Nó sẽ tạo ra output −
Random integer: 45 Random number: 86
Lưu ý rằng đầu ra có thể khác nhau mỗi khi mã được thực thi. Tuy nhiên, các số ngẫu nhiên được tạo ra bởi các hàm này không an toàn về mặt mã hóa, vì có thể đoán được kết quả của chúng. PHP 7 đã giới thiệu một vài hàm tạo ra các số ngẫu nhiên an toàn.
Các hàm sau đây, được đảm bảo an toàn về mặt mật mã, đã được thêm vào gần đây −
random_bytes() − Tạo ra các byte giả ngẫu nhiên an toàn về mặt mật mã.
random_int() − Tạo ra các số nguyên giả ngẫu nhiên an toàn về mặt mật mã.
random_bytes() tạo ra một chuỗi byte ngẫu nhiên có độ dài tùy ý, phù hợp cho các mục đích mã hóa, chẳng hạn như khi tạo muối, khóa hoặc vector khởi tạo.
string random_bytes ( int $length )
length − Độ dài của chuỗi ngẫu nhiên mà nên được trả về tính bằng byte.
Hàm trả về một chuỗi chứa số byte ngẫu nhiên an toàn về mặt mật mã theo yêu cầu.
Nếu không tìm thấy nguồn ngẫu nhiên phù hợp, một Exception sẽ được ném ra. Nếu các tham số không hợp lệ được cung cấp, một TypeError sẽ được ném ra. Nếu một độ dài byte không hợp lệ được cung cấp, một Error sẽ được ném ra.
Hãy xem xét ví dụ sau đây −
<?php $bytes = random_bytes(5); print(bin2hex($bytes)); ?>
Nó có thể tạo ra output (có thể khác nhau mỗi lần) −
6a85eec950
random_int() tạo ra các số nguyên ngẫu nhiên theo chuẩn mật mã, phù hợp cho những trường hợp mà kết quả không thiên lệch là rất quan trọng.
int random_int ( int $min , int $max )
min − Giá trị thấp nhất được trả về, phải là PHP_INT_MIN hoặc cao hơn.
max − Giá trị cao nhất được trả về, phải nhỏ hơn hoặc bằng PHP_INT_MAX.
Hàm này trả về một số nguyên ngẫu nhiên an toàn về mặt mật mã trong khoảng từ min đến max, bao gồm cả hai đầu.
Nếu không tìm thấy nguồn ngẫu nhiên thích hợp, một Exception sẽ được ném ra. Nếu các tham số không hợp lệ được cung cấp, một TypeError sẽ được ném ra. Nếu max nhỏ hơn min, một Error sẽ được ném ra.
Hãy xem xét ví dụ sau đây −
<?php print(random_int(100, 999)); print("\n"); print(random_int(-1000, 0)); ?>
Nó có thể tạo ra output (nó khác nhau mỗi lần) −
495 -563