Cách tạo php mã thông báo ngẫu nhiên?
Đ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ế Show
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
Tạo số ngẫu nhiên trong PHPCó 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 187 3276 1267 15 1267 34598 3467 125 17 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ênThay 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
2 3 // Output: 0.69458310943776
4 echo mt_rand(0, mt_getrandmax())/mt_getrandmax(); 5 187 3276 1267 15 1267 34598 3467 125 170 187 3276 1267 15 1267 34598 3467 125 171 187 3276 1267 15 1267 34598 3467 125 172 187 3276 1267 15 1267 34598 3467 125 173 187 3276 1267 15 1267 34598 3467 125 174 187 3276 1267 15 1267 34598 3467 125 175 187 3276 1267 15 1267 34598 3467 125 176 187 3276 1267 15 1267 34598 3467 125 177 187 3276 1267 15 1267 34598 3467 125 178 187 3276 1267 15 1267 34598 3467 125 179 10 11 12 13 14 15 16 17 18 19
0
1
2Khi tạo 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ênMộ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ể 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 mà hạt giống 156 được gọi là 180 và hàm mà hạt giống 159 đượ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
2 3
74
95 21 187 3276 1267 15 1267 34598 3467 125 170 187 3276 1267 15 1267 34598 3467 125 172
7187 3276 1267 15 1267 34598 3467 125 174
9187 3276 1267 15 1267 34598 3467 125 176 21 187 3276 1267 15 1267 34598 3467 125 178 10
711
913 21 15 16
2Tạ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
2 3
74 5 // Output: 0.69458310943776
6187 3276 1267 15 1267 34598 3467 125 170 187 3276 1267 15 1267 34598 3467 125 172 // Output: 0.69458310943776
9187 3276 1267 15 1267 34598 3467 125 174 41 187 3276 1267 15 1267 34598 3467 125 176 43 187 3276 1267 15 1267 34598 3467 125 178 187 3276 1267 15 1267 34598 3467 125 179 10 11 48 13 echo mt_rand(0, mt_getrandmax())/mt_getrandmax();0 15 16 echo mt_rand(0, mt_getrandmax())/mt_getrandmax();3 18 echo mt_rand(0, mt_getrandmax())/mt_getrandmax();5 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 PHPCó 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ấtNế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
2 3 50 4 52 518_______0 55 187 3276 1267 15 1267 34598 3467 125 172 57 187 3276 1267 15 1267 34598 3467 125 174 187 3276 1267 15 1267 34598 3467 125 176 187 3276 1267 15 1267 34598 3467 125 1700 187 3276 1267 15 1267 34598 3467 125 178 187 3276 1267 15 1267 34598 3467 125 1702 10_______0_______1_______26_______2 Tạo chuỗi xáo trộnNế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
2 3 187 3276 1267 15 1267 34598 3467 125 1710 4 187 3276 1267 15 1267 34598 3467 125 1712 5 187 3276 1267 15 1267 34598 3467 125 1714 187 3276 1267 15 1267 34598 3467 125 170 187 3276 1267 15 1267 34598 3467 125 172 187 3276 1267 15 1267 34598 3467 125 1717 187 3276 1267 15 1267 34598 3467 125 174 187 3276 1267 15 1267 34598 3467 125 1719 187 3276 1267 15 1267 34598 3467 125 176 187 3276 1267 15 1267 34598 3467 125 1721 187 3276 1267 15 1267 34598 3467 125 178 10_______26_______2 Đầ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ênNế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
2 3 187 3276 1267 15 1267 34598 3467 125 1717 4 5 187 3276 1267 15 1267 34598 3467 125 1732 187 3276 1267 15 1267 34598 3467 125 170 187 3276 1267 15 1267 34598 3467 125 1734 187 3276 1267 15 1267 34598 3467 125 172 187 3276 1267 15 1267 34598 3467 125 1736 187 3276 1267 15 1267 34598 3467 125 174 187 3276 1267 15 1267 34598 3467 125 1738 187 3276 1267 15 1267 34598 3467 125 176 187 3276 1267 15 1267 34598 3467 125 1740 187 3276 1267 15 1267 34598 3467 125 178 187 3276 1267 15 1267 34598 3467 125 1742 10 187 3276 1267 15 1267 34598 3467 125 1744 11 13 187 3276 1267 15 1267 34598 3467 125 1747 15 187 3276 1267 15 1267 34598 3467 125 179 16 18 187 3276 1267 15 1267 34598 3467 125 1752
0187 3276 1267 15 1267 34598 3467 125 1754
1187 3276 1267 15 1267 34598 3467 125 1756 187 3276 1267 15 1267 34598 3467 125 1757 187 3276 1267 15 1267 34598 3467 125 1758 187 3276 1267 15 1267 34598 3467 125 1754 187 3276 1267 15 1267 34598 3467 125 1760 187 3276 1267 15 1267 34598 3467 125 1761 187 3276 1267 15 1267 34598 3467 125 1762 187 3276 1267 15 1267 34598 3467 125 1763 187 3276 1267 15 1267 34598 3467 125 1764 187 3276 1267 15 1267 34598 3467 125 1765 187 3276 1267 15 1267 34598 3467 125 1766
2Bạ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ênNếu muốn tạo 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 một hàm như 191 làm đầu vào. Theo mặc định, _______0_______92 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 cách sử dụ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
2 3 187 3276 1267 15 1267 34598 3467 125 1772 4 187 3276 1267 15 1267 34598 3467 125 1774 5 187 3276 1267 15 1267 34598 3467 125 170 187 3276 1267 15 1267 34598 3467 125 1777 187 3276 1267 15 1267 34598 3467 125 172 187 3276 1267 15 1267 34598 3467 125 1779 187 3276 1267 15 1267 34598 3467 125 174 187 3276 1267 15 1267 34598 3467 125 176 187 3276 1267 15 1267 34598 3467 125 1782 187 3276 1267 15 1267 34598 3467 125 178 187 3276 1267 15 1267 34598 3467 125 1784 10 11 187 3276 1267 15 1267 34598 3467 125 1787 13 187 3276 1267 15 1267 34598 3467 125 1789 15 16
2Như 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 bảo mật 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 an toàn 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
2 3 187 3276 1267 15 1267 34598 3467 125 1797 4 187 3276 1267 15 1267 34598 3467 125 1799 5 187 3276 1267 15 1267 34598 3467 125 170 102 187 3276 1267 15 1267 34598 3467 125 172 104 187 3276 1267 15 1267 34598 3467 125 174 187 3276 1267 15 1267 34598 3467 125 176 107 187 3276 1267 15 1267 34598 3467 125 178 109 10_______0_______1_______26_______2 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
2 3 117 4 187 3276 1267 15 1267 34598 3467 125 1736 5 121 187 3276 1267 15 1267 34598 3467 125 170 123 187 3276 1267 15 1267 34598 3467 125 172 125 187 3276 1267 15 1267 34598 3467 125 174 127 187 3276 1267 15 1267 34598 3467 125 176 187 3276 1267 15 1267 34598 3467 125 1744 187 3276 1267 15 1267 34598 3467 125 178 10 187 3276 1267 15 1267 34598 3467 125 1747 11 187 3276 1267 15 1267 34598 3467 125 179 13 15 137 16 139 18
0142
1139 187 3276 1267 15 1267 34598 3467 125 1756 187 3276 1267 15 1267 34598 3467 125 1758 147 187 3276 1267 15 1267 34598 3467 125 1760 139 187 3276 1267 15 1267 34598 3467 125 1761 187 3276 1267 15 1267 34598 3467 125 1763
2Hàm
00 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
01 để 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
02. 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ìnhSuy nghĩ cuối cùngTrong 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
03, 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
06 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
Làm cách nào để tạo mã thông báo trong PHP?Cách tạo mã thông báo web JSON trong PHP . Tạo tiêu đề và tải trọng. Để bắt đầu, chúng ta cần tạo các chuỗi JSON tiêu đề và tải trọng. . Tạo chuỗi tiêu đề và tải trọng Base64Url. . Tạo chữ ký. . Base64Url Mã hóa chữ ký. . Tạo mã thông báo web JSON Làm cách nào để tạo các ký tự ngẫu nhiên trong PHP?Sử dụng hàm str_shuffle() . Hàm str_shuffle() là một hàm có sẵn trong PHP và được sử dụng để xáo trộn ngẫu nhiên tất cả các ký tự của một chuỗi được truyền cho hàm dưới dạng tham số. Khi một số được chuyển, nó coi số đó là chuỗi và xáo trộn nó.
Làm cách nào để tạo các từ ngẫu nhiên trong PHP?Có thể đạt được như sau. . Lưu trữ tất cả các chữ cái có thể thành một chuỗi Tạo chỉ mục ngẫu nhiên từ 0 đến độ dài chuỗi-1 In chữ cái tại chỉ mục đó Thực hiện bước này n lần (trong đó n là độ dài chuỗi cần thiết) Làm cách nào để tạo số có 4 chữ số ngẫu nhiên trong PHP?hàm rand() hoặc mt_rand() để tạo số ngẫu nhiên có 4 chữ số trong PHP. |