Điều tương tự cũng được áp dụng cho việc tạo số ngẫu nhiên và chuỗi ký tự chữ và số. Điều tốt nhất chúng ta có thể hy vọng là tạo ra các số và chuỗi dường như không theo một khuôn mẫu nào và kẻ tấn công không thể dự đoán được trên thực tế
Trong hướng dẫn này, chúng tôi sẽ đề cập đến các kỹ thuật khác nhau để tạo số ngẫu nhiên và chuỗi ký tự chữ và số trong PHP. Một số trong số chúng sẽ được bảo mật bằng mật mã, trong khi một số khác chỉ dành cho mục đích sử dụng thông thường, chẳng hạn như gán tên tệp giả ngẫu nhiên hoặc tạo URL và đề xuất tên người dùng
Học PHP với một khóa học trực tuyến miễn phí
Nếu bạn muốn học PHP, hãy xem khóa học trực tuyến miễn phí của chúng tôi về các nguyên tắc cơ bản của PHP
Trong khóa học này, bạn sẽ học các nguyên tắc cơ bản của lập trình PHP. Bạn sẽ bắt đầu với những kiến thức cơ bản, học cách PHP hoạt động và viết các hàm và vòng lặp PHP đơn giản. Sau đó, bạn sẽ xây dựng các lớp mã hóa để lập trình hướng đối tượng đơn giản [OOP]. Đồng thời, bạn sẽ học tất cả các kỹ năng quan trọng nhất để viết ứng dụng cho web. bạn sẽ có cơ hội thực hành phản hồi các yêu cầu GET và POST, phân tích cú pháp JSON, xác thực người dùng và sử dụng cơ sở dữ liệu MySQL
Nguyên tắc cơ bản PHP
Jeremy McPeak
29 Thg 10 2021
Tạo số ngẫu nhiên trong PHP
Có ba hàm khác nhau để tạo số ngẫu nhiên trong PHP. Tất cả chúng sẽ chấp nhận giá trị tối thiểu và tối đa có thể cho các số ngẫu nhiên và xuất ra một số ngẫu nhiên cho bạn. Đây là
153,
154, và
155
Với
156, giá trị tối thiểu và tối đa của số nguyên mà bạn có thể tạo nằm trong khoảng từ
157 và giá trị được trả về bởi
158. Trước PHP 7. 1. 0, chức năng này chậm hơn khoảng bốn lần so với
159. Tuy nhiên, bắt đầu từ PHP 7. 1. 0, nó đã được đặt bí danh là
159. Tuy nhiên, không giống như
159, bạn có thể đặt giá trị của
162 thấp hơn
163 mà không gây ra lỗi
Với
159, giá trị tối thiểu và tối đa của số nguyên mà bạn có thể tạo nằm trong khoảng từ
157 và giá trị được trả về bởi
166. Nó dựa vào việc triển khai Mersenne Twister để tạo số ngẫu nhiên. Tuy nhiên, hãy coi chừng—trước PHP 7. 1. 0, chức năng này đã triển khai một phiên bản thuật toán không chính xác để tạo các số. Tuy nhiên, nó đã được sửa trong các phiên bản mới hơn
Chức năng thậm chí còn tốt hơn trong PHP 7. 2. 0 bằng cách loại bỏ lỗi thiên vị modulo. Điều này có nghĩa là đối với một số hạt giống cụ thể, chuỗi số ngẫu nhiên của bạn giờ đây sẽ tốt hơn một chút so với các phiên bản cũ hơn. Tuy nhiên, một số mã chuyên biệt thực sự có thể dựa vào sự thiên vị này. Nếu vậy, bạn có thể sử dụng thuật toán khởi tạo cũ hơn bằng cách gọi hàm
167 để khởi tạo trình tạo số ngẫu nhiên và chuyển
168 làm giá trị của tham số thứ hai
Hàm
159 có chu kỳ là 219937−1, về cơ bản có nghĩa là trong trường hợp tốt nhất, bạn nhận được tối đa 219937−1 số ngẫu nhiên trước khi chuỗi bắt đầu lặp lại. Bạn nên lưu ý rằng sự lặp lại của một dãy không giống như sự lặp lại của một số cụ thể. Nói cách khác, bạn có thể nhận được cùng một số ngẫu nhiên hai lần, nhưng điều đó không có nghĩa là chính chuỗi đó đã bắt đầu lặp lại. Trình tự sau đây là một ví dụ
1
18
Trong chuỗi trên, chúng tôi có 1267 hai lần ở đầu ra, nhưng điều đó không có nghĩa là toàn bộ chuỗi bắt đầu lặp lại sau đó. Không có khả năng lặp lại cùng một số sớm như vậy trong một chuỗi ngẫu nhiên, nhưng có thể
Số nguyên ngẫu nhiên an toàn bằng mật mã
Nếu bạn muốn các số giả ngẫu nhiên được bảo mật bằng mật mã, thì hàm
170 trong PHP là lựa chọn tốt nhất dành cho bạn. Nó sẽ tạo ra các số ngẫu nhiên giữa các giá trị
163 và
162 được cung cấp, giá trị mặc định là
173 và
174. Thật không may, chức năng này chỉ khả dụng bắt đầu từ PHP 7. 0. Đối với các phiên bản trước đó, bạn có thể sử dụng polyfill này trên GitHub
Phao ngẫu nhiên
Thay vì tạo số nguyên ngẫu nhiên, bạn cũng có thể muốn tạo số float. Điều này có thể được thực hiện dễ dàng bằng cách chia một số ngẫu nhiên với giá trị được trả về bởi
166. Ví dụ sau sẽ minh họa cách tạo số float ngẫu nhiên trong khoảng từ 0 đến 1 hoặc giữa bất kỳ giới hạn tối thiểu và tối đa nào khác
1
16
17
18
19
10
11
12
180
181
182
183
184
185
186
187
188
189
10
11
12
13
14
15
16
17_______08
19_____61
1___260_____2
Khi tạo một số float ngẫu nhiên giữa các giới hạn đã cho, chúng tôi đảm bảo rằng các số nguyên ngẫu nhiên không vượt quá
176. Bằng cách này, chúng tôi có thể chắc chắn rằng việc thêm phần float sẽ không lấy số vượt quá giới hạn tối đa
Tạo hạt giống cho bộ tạo số ngẫu nhiên
Một khái niệm cần giải thích một chút là hạt giống. Nói một cách đơn giản, đây chỉ là những số có thể được sử dụng để khởi tạo các hàm
156 và
159 trước khi tạo bất kỳ số ngẫu nhiên nào. Hàm chứa hạt giống
156 được gọi là ________ 080 và hàm chứa hạt giống ________ 059 được gọi là
182
Điều quan trọng cần nhớ là việc cung cấp giá trị gốc ban đầu mỗi lần trước khi gọi
156 và
159 không nhất thiết sẽ tạo ra các số ngẫu nhiên tốt hơn. Trên thực tế, sử dụng cùng một hạt giống mỗi lần cũng sẽ cung cấp cho bạn cùng một số ngẫu nhiên
1
16
17
18
167
10
169
12
171
180
182
167
184
169
186
171
188
10
167
11
169
13
171
15
16
162
Tạo một số ngẫu nhiên rất hữu ích trong các trường hợp bạn muốn tạo một chuỗi ngẫu nhiên nhưng có thể lặp lại. Đoạn mã sau tạo cùng một chuỗi số ngẫu nhiên khi chạy hai lần
1
16
17
18
167
10
12
196
180
182
199
184
101
186
103
188
189
10
11
108
13
110
15
16
113
18
115
Tạo các chuỗi ngẫu nhiên có thể tái tạo theo cách này có thể giúp gỡ lỗi các chương trình đang được thử nghiệm bằng dữ liệu ngẫu nhiên—nếu bạn theo dõi hạt giống, bạn có thể tạo lại cùng một đầu vào để tìm ra lỗi sai
Tạo chuỗi chữ và số ngẫu nhiên trong PHP
Có nhiều cách để tạo chuỗi chữ và số ngẫu nhiên và cách bạn sử dụng sẽ tùy thuộc vào nhu cầu của bạn
Tạo ID duy nhất
Nếu bạn chỉ muốn tạo một chuỗi duy nhất và chuỗi đó không cần phải bảo mật bằng mật mã, thì hãy cân nhắc sử dụng hàm
185. Nó trả về một mã định danh duy nhất dựa trên dấu thời gian hiện tại
Hàm cũng chấp nhận hai tham số để thêm tiền tố hoặc tăng entropy của chuỗi được tạo. Dưới đây là một số ví dụ của nó
1
16
17
18
120
10
122
12
180
125
182
127
184
186
1800
188
1802
10
11
162
Tạo chuỗi xáo trộn
Nếu muốn tạo chuỗi chữ và số ngẫu nhiên từ một nhóm ký tự cố định, bạn có thể sử dụng hàm
186. Hàm này sẽ cung cấp cho bạn một chuỗi được xáo trộn ngẫu nhiên. Bắt đầu từ PHP 7. 1, thuật toán xác định thứ tự ngẫu nhiên của các ký tự trong chuỗi đầu ra đã được thay đổi thành Mersenne Twister
Hãy nhớ rằng chuỗi ngẫu nhiên được tạo theo cách này không an toàn bằng mật mã. Tuy nhiên, chuỗi vẫn sẽ khá khó đoán khi sử dụng phổ biến như tạo tên tệp hoặc URL ngẫu nhiên. Đây là vài ví dụ
1
16
17
18
1810
10
1812
12
1814
180
182
1817
184
1819
186
1821
188
10
162
Đầu ra của bạn rất có thể sẽ khác nhau trong cả hai trường hợp. Trong trường hợp đầu tiên, chúng tôi chỉ xáo trộn chuỗi ký tự được phép và sau đó lấy 10 ký tự đầu tiên của nó. Trong trường hợp thứ hai, chúng tôi đã thêm "video" vào đầu chuỗi được tạo và ". mp4" ở cuối
Phương pháp tạo chuỗi chữ và số ngẫu nhiên này rất dễ, nhưng nó có một số vấn đề. Ví dụ: bạn sẽ không bao giờ nhận được hai lần các ký tự giống nhau trong chuỗi ngẫu nhiên của mình. Ngoài ra, độ dài của chuỗi đầu ra ngẫu nhiên chỉ có thể dài bằng chuỗi đầu vào
Tạo chuỗi ngẫu nhiên
Nếu các vấn đề tôi liệt kê ở trên là một công cụ giải quyết vấn đề, bạn có thể muốn xem xét một số triển khai khác. Đoạn mã sau sẽ giải quyết cả hai vấn đề này
1
16
17
18
1817
10
12
1832
180
1834
182
1836
184
1838
186
1840
188
1842
10
1844
11
13
1847
15
189
16
18
1852
160
1854
161
1856
1857
1858
1854
1860
1861
1862
1863
1864
1865
1866
162
Bạn có thể sửa đổi nó để thêm các hậu tố và tiền tố cụ thể vào chuỗi ngẫu nhiên được tạo. Những người đang sử dụng PHP 7 có thể cải thiện hơn nữa việc tạo chuỗi bằng cách sử dụng hàm bảo mật bằng mật mã
170 thay vì
159
Tạo chuỗi thập lục phân ngẫu nhiên
Nếu muốn tạo các chuỗi thập lục phân ngẫu nhiên trong PHP, bạn cũng có thể sử dụng hàm
189 hoặc
190 . Cả hai sẽ tạo ra giá trị băm của một chuỗi đầu vào nhất định
Bạn sẽ tiếp tục nhận được các giá trị băm duy nhất miễn là đầu vào là duy nhất. Điều này có thể đạt được bằng cách sử dụng đầu ra của hàm như
191 làm đầu vào. Theo mặc định,
192 sẽ trả về chuỗi thập lục phân gồm 32 ký tự và
193 sẽ trả về chuỗi thập lục phân gồm 40 ký tự. Chúng có thể được cắt bớt theo độ dài cụ thể bằng hàm
194
Dưới đây là một ví dụ về đầu ra được trả về bởi các chức năng này
1
16
17
18
1872
10
1874
12
180
1877
182
1879
184
186
1882
188
1884
10
11
1887
13
1889
15
16
162
Như bạn có thể thấy, việc tạo các chuỗi thập lục phân ngẫu nhiên và duy nhất dài tối đa 40 ký tự rất dễ dàng trong PHP
Tạo các chuỗi ngẫu nhiên an toàn bằng mật mã
Ba chức năng để tạo các chuỗi ký tự chữ và số ngẫu nhiên mà chúng ta đã thảo luận cho đến nay không an toàn về mặt mã hóa. May mắn thay, PHP cũng có một chức năng được gọi là
195 để tạo các byte giả ngẫu nhiên được bảo mật bằng mật mã. Tham số
196 xác định độ dài của chuỗi đầu ra
Khi bạn có đầu ra dưới dạng byte ngẫu nhiên, bạn có thể sử dụng hàm
197 để chuyển đổi chúng thành giá trị thập lục phân. Điều này sẽ tăng gấp đôi chiều dài của chuỗi
1
16
17
18
1897
10
1899
12
180
102
182
104
184
186
107
188
109
10
11
162
Một chức năng khác mà bạn có thể sử dụng để tạo các byte ngẫu nhiên được bảo mật bằng mật mã là
198. Giá trị của tham số thứ hai có thể được sử dụng để xác định xem chuỗi đầu ra có được tạo bằng thuật toán bảo mật bằng mật mã hay không
Trong các ví dụ trên, việc sử dụng hàm
197 cung cấp cho chúng tôi giá trị cuối cùng dưới dạng chuỗi thập lục phân. Nếu vì lý do nào đó, bạn muốn có một chuỗi chữ và số ngẫu nhiên được bảo mật bằng mật mã sử dụng tất cả các ký tự từ a đến z, thì bạn nên cân nhắc sử dụng hàm sau
1
16
17
18
117
10
1836
12
121
180
123
182
125
184
127
186
1844
188
10
1847
11
189
13
15
137
16
139
18
160
142
161
139
1856
1858
147
1860
139
1861
1863
162
Hàm
1600 mà chúng tôi đã viết ở trên chấp nhận một tham số duy nhất xác định độ dài của chuỗi mà chúng tôi muốn nó trả về. Chúng tôi chạy một vòng lặp
1601 để tạo ra một số nguyên ngẫu nhiên trong phạm vi từ 0 đến 36. Sau đó, chúng tôi chuyển đổi số của mình từ cơ số 10 sang cơ số 36 bằng cách sử dụng hàm
1602. Ký tự kết quả có thể là bất kỳ thứ gì từ chữ số 0 đến 9 và ký tự a đến z. Chúng tôi nối nó vào cuối chuỗi ngẫu nhiên của chúng tôi. Cuối cùng, chúng tôi trả về chuỗi đầy đủ của mình
Suy nghĩ cuối cùng
Trong hướng dẫn này, chúng ta đã xem xét việc tạo các số ngẫu nhiên và chuỗi ký tự chữ và số trong PHP. Tạo số ngẫu nhiên có thể hữu ích trong nhiều tình huống, chẳng hạn như trong các trò chơi mà bạn phải sinh ra kẻ thù hoặc cung cấp ngẫu nhiên cho người dùng một số manh mối về các chữ cái để họ có thể tạo thành một từ hoàn chỉnh.
Cũng giống như các số ngẫu nhiên, việc tạo các chuỗi chữ và số ngẫu nhiên cũng có thể khá hữu ích trong nhiều trường hợp. Với sự trợ giúp của
1603, bạn có thể chọn bộ ký tự nào xuất hiện trong chuỗi ngẫu nhiên của mình. Với
193 và
192, bạn có thể dễ dàng tạo các chuỗi thập lục phân ngẫu nhiên và với
1606 bạn có thể tạo các chuỗi bảo mật bằng mật mã. Điều này sẽ cho phép bạn tạo các tên tệp và tên người dùng ngẫu nhiên nhưng có ý nghĩa khó đoán