Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem cùng với hướng dẫn bằng văn bản để hiểu sâu hơn về sự hiểu biết của bạn: Tạo dữ liệu ngẫu nhiên trong Python This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Generating Random Data in Python
Làm thế nào ngẫu nhiên là ngẫu nhiên? Đây là một câu hỏi kỳ lạ để hỏi, nhưng nó là một trong những tầm quan trọng tối quan trọng trong trường hợp có liên quan đến bảo mật thông tin. Bất cứ khi nào bạn tạo ra dữ liệu, chuỗi hoặc số ngẫu nhiên trong Python, thì một ý tưởng tốt là có ít nhất một ý tưởng sơ bộ về cách tạo dữ liệu đó.
Tại đây, bạn sẽ bao gồm một số ít các tùy chọn khác nhau để tạo dữ liệu ngẫu nhiên trong Python, và sau đó xây dựng để so sánh từng loại về mức độ bảo mật, tính linh hoạt, mục đích và tốc độ của nó.
Tôi hứa rằng hướng dẫn này sẽ không phải là một bài học về toán học hay mật mã, mà tôi sẽ được trang bị tốt để giảng bài ngay từ đầu. Bạn sẽ nhận được nhiều môn toán như cần thiết, và không còn nữa.
Làm thế nào ngẫu nhiên là ngẫu nhiên?
Đầu tiên, một từ chối trách nhiệm nổi bật là cần thiết. Hầu hết dữ liệu ngẫu nhiên được tạo ra với Python không hoàn toàn ngẫu nhiên theo nghĩa khoa học của từ này. Thay vào đó, nó là giả: được tạo bằng trình tạo số giả (PRNG), về cơ bản là bất kỳ thuật toán nào để tạo dữ liệu dường như ngẫu nhiên nhưng vẫn có thể tái tạo.pseudorandom: generated with a
pseudorandom number generator (PRNG), which is essentially any algorithm for generating seemingly random but still reproducible data.
Các số ngẫu nhiên của True True có thể được tạo bởi, bạn đoán nó, một trình tạo số ngẫu nhiên thực sự (TRNG). Một ví dụ là nhiều lần nhặt một cái chết trên sàn nhà, ném nó lên không trung và để nó hạ cánh như thế nào.
Giả sử rằng cú ném của bạn không thiên vị, bạn thực sự không biết cái chết sẽ hạ cánh trên số nào. Cuộn một cái chết là một hình thức thô của việc sử dụng phần cứng để tạo ra một số không xác định. .
PRNG, thường được thực hiện với phần mềm thay vì phần cứng, hoạt động hơi khác nhau. Ở đây, một mô tả ngắn gọn:
Chúng bắt đầu với một số ngẫu nhiên, được gọi là hạt giống, và sau đó sử dụng một thuật toán để tạo ra một chuỗi các bit giả ngẫu nhiên dựa trên nó. (Nguồn)
Bạn có thể đã được nói với những người đọc các tài liệu! ở một điểm nào đó. Vâng, những người đó không sai. Ở đây, một đoạn trích đặc biệt đáng chú ý từ tài liệu mô -đun
CẢNH BÁO: Không nên sử dụng các trình tạo giả ngẫu nhiên của mô-đun này cho mục đích bảo mật. (Nguồn): The pseudo-random generators of this module should not be used for security purposes.
(Source)
2. Đó là những gì thực hiện các cuộc gọi tiếp theo để tạo ra các số ngẫu nhiên xác định: Đầu vào A luôn tạo ra đầu ra B. Phước lành này cũng có thể là một lời nguyền nếu nó được sử dụng một cách độc hại.
Có lẽ các thuật ngữ ngẫu nhiên của người Hồi giáo và người xác định có vẻ như chúng không thể tồn tại bên cạnh nhau. Để làm cho điều đó rõ ràng hơn, ở đây, một phiên bản cực kỳ được cắt giảm của
8 ban đầu được định nghĩa là giá trị hạt giống và sau đó biến thành một chuỗi số xác định dựa trên hạt giống đó:
classNotSoRandom(object):defseed(self,a=3):"""Seed the world's most mysterious random number generator."""self.seedval=adefrandom(self):"""Look, random numbers!"""self.seedval=(self.seedval*3)%19returnself.seedval_inst=NotSoRandom()seed=_inst.seedrandom=_inst.random
Don Tiết lấy ví dụ này theo nghĩa đen, vì nó có nghĩa là chủ yếu để minh họa cho khái niệm này. Nếu bạn sử dụng giá trị hạt giống 1234, chuỗi các cuộc gọi tiếp theo đến
Bạn sẽ thấy một minh họa nghiêm túc hơn về điều này trong thời gian ngắn.
Những gì là bảo mật về mặt mật mã học là gì?
Nếu bạn đã có đủ với các từ viết tắt của RNG RNG, hãy để Lừa ném thêm một bản vào hỗn hợp: CSPRNG hoặc PRNG an toàn bằng mã hóa. CSPRNGS phù hợp để tạo dữ liệu nhạy cảm như mật khẩu, trình xác thực và mã thông báo. Đưa ra một chuỗi ngẫu nhiên, thực tế không có cách nào để joe độc hại để xác định chuỗi nào đến trước hoặc sau chuỗi đó theo một chuỗi các chuỗi ngẫu nhiên.
Một thuật ngữ khác mà bạn có thể thấy là entropy. Tóm lại, điều này đề cập đến số lượng ngẫu nhiên được giới thiệu hoặc mong muốn. Ví dụ: một mô -đun Python mà bạn sẽ bao gồm ở đây xác định
0, số byte để trả về theo mặc định. Các nhà phát triển cho rằng đây là những người đủ điều kiện là một lượng lớn tiếng ồn.entropy. In a nutshell, this refers to the amount of randomness introduced or desired. For example, one Python
module that you’ll cover here defines
0, the number of bytes to return by default. The developers deem this to be “enough” bytes to be a sufficient amount of noise.
Một điểm quan trọng về CSPRNGS là chúng vẫn còn giả. Chúng được thiết kế theo một cách nào đó có tính quyết định nội bộ, nhưng chúng thêm một số biến khác hoặc có một số tài sản làm cho chúng đủ ngẫu nhiên để cấm hỗ trợ vào bất kỳ chức năng nào thực thi chủ nghĩa quyết định.
Những gì bạn sẽ bao gồm ở đây
Trong các thuật ngữ thực tế, điều này có nghĩa là bạn nên sử dụng các PRNG đơn giản để mô hình hóa, mô phỏng và mô hình hóa thống kê có thể tái tạo dữ liệu ngẫu nhiên. Họ cũng nhanh hơn đáng kể so với CSPRNG, như bạn sẽ thấy sau này. Sử dụng CSPRNG cho các ứng dụng bảo mật và mật mã trong đó độ nhạy dữ liệu là bắt buộc.
Ngoài việc mở rộng các trường hợp sử dụng ở trên, trong hướng dẫn này, bạn sẽ đi sâu vào các công cụ Python để sử dụng cả PRNG và CSPRNGS:
Có lẽ công cụ được biết đến rộng rãi nhất để tạo dữ liệu ngẫu nhiên trong Python là mô -đun ____32 của nó, sử dụng thuật toán PRNG của Mersenne Twister làm trình tạo lõi của nó.
9 trả về một chiếc phao ngẫu nhiên trong khoảng [0,0, 1.0). Kết quả sẽ luôn luôn nhỏ hơn điểm cuối bên phải (1.0). Điều này còn được gọi là phạm vi bán mở:
Nếu bạn tự chạy mã này, tôi sẽ đặt cược tiết kiệm cuộc sống của mình rằng các số được trả lại trên máy của bạn sẽ khác. Mặc định khi bạn don hạt giống máy phát điện là sử dụng thời gian hệ thống hiện tại của bạn hoặc nguồn ngẫu nhiên của bạn từ hệ điều hành của bạn nếu có sẵn.
Nếu bạn tự chạy mã này, tôi sẽ đặt cược tiết kiệm cuộc sống của mình rằng các số được trả lại trên máy của bạn sẽ khác. Mặc định khi bạn don hạt giống máy phát điện là sử dụng thời gian hệ thống hiện tại của bạn hoặc nguồn ngẫu nhiên của bạn từ hệ điều hành của bạn nếu có sẵn.
Nếu bạn tự chạy mã này, tôi sẽ đặt cược tiết kiệm cuộc sống của mình rằng các số được trả lại trên máy của bạn sẽ khác. Mặc định khi bạn don hạt giống máy phát điện là sử dụng thời gian hệ thống hiện tại của bạn hoặc nguồn ngẫu nhiên của bạn từ hệ điều hành của bạn nếu có sẵn.
>>>
>>> random.randrange(1,10)5
Nếu bạn tự chạy mã này, tôi sẽ đặt cược tiết kiệm cuộc sống của mình rằng các số được trả lại trên máy của bạn sẽ khác. Mặc định khi bạn don hạt giống máy phát điện là sử dụng thời gian hệ thống hiện tại của bạn hoặc nguồn ngẫu nhiên của bạn từ hệ điều hành của bạn nếu có sẵn.
Nếu bạn tự chạy mã này, tôi sẽ đặt cược tiết kiệm cuộc sống của mình rằng các số được trả lại trên máy của bạn sẽ khác. Mặc định khi bạn don hạt giống máy phát điện là sử dụng thời gian hệ thống hiện tại của bạn hoặc nguồn ngẫu nhiên của bạn từ hệ điều hành của bạn nếu có sẵn.
Nếu bạn tự chạy mã này, tôi sẽ đặt cược tiết kiệm cuộc sống của mình rằng các số được trả lại trên máy của bạn sẽ khác. Mặc định khi bạn don hạt giống máy phát điện là sử dụng thời gian hệ thống hiện tại của bạn hoặc nguồn ngẫu nhiên của bạn từ hệ điều hành của bạn nếu có sẵn.
Nếu bạn tự chạy mã này, tôi sẽ đặt cược tiết kiệm cuộc sống của mình rằng các số được trả lại trên máy của bạn sẽ khác. Mặc định khi bạn don hạt giống máy phát điện là sử dụng thời gian hệ thống hiện tại của bạn hoặc nguồn ngẫu nhiên của bạn từ hệ điều hành của bạn nếu có sẵn.
Lưu ý sự lặp lại của các số ngẫu nhiên của người Viking. Trình tự các số ngẫu nhiên trở thành xác định hoặc được xác định hoàn toàn bởi giá trị hạt giống, 444.
Nếu bạn tự chạy mã này, tôi sẽ đặt cược tiết kiệm cuộc sống của mình rằng các số được trả lại trên máy của bạn sẽ khác. Mặc định khi bạn don hạt giống máy phát điện là sử dụng thời gian hệ thống hiện tại của bạn hoặc nguồn ngẫu nhiên của bạn từ hệ điều hành của bạn nếu có sẵn.
Với >>> random.randint(0, 10)
7
>>> random.randint(500, 50000)
18601
8, bạn có thể tạo ra kết quả có thể tái tạo và chuỗi cuộc gọi sau >>> random.randint(0, 10)
7
>>> random.randint(500, 50000)
18601
8 sẽ tạo ra cùng một dấu vết dữ liệu:
Lưu ý sự lặp lại của các số ngẫu nhiên của người Viking. Trình tự các số ngẫu nhiên trở thành xác định hoặc được xác định hoàn toàn bởi giá trị hạt giống, 444.
Nếu bạn tự chạy mã này, tôi sẽ đặt cược tiết kiệm cuộc sống của mình rằng các số được trả lại trên máy của bạn sẽ khác. Mặc định khi bạn don hạt giống máy phát điện là sử dụng thời gian hệ thống hiện tại của bạn hoặc nguồn ngẫu nhiên của bạn từ hệ điều hành của bạn nếu có sẵn.
Điều gì về việc tạo dữ liệu tương quan? Hãy nói rằng bạn muốn mô phỏng hai chuỗi thời gian tương quan. Một cách để đi về điều này là với chức năng Numpy từ ____87, có tính đến một ma trận hiệp phương sai. Nói cách khác, để rút ra từ một biến ngẫu nhiên được phân phối thông thường, bạn cần chỉ định giá trị trung bình và phương sai của nó (hoặc độ lệch chuẩn).
Để lấy mẫu từ phân phối bình thường đa biến, bạn chỉ định ma trận phương pháp và hiệp phương sai, và bạn kết thúc với nhiều chuỗi dữ liệu tương quan, mỗi chuỗi được phân phối gần như bình thường.
Tuy nhiên, thay vì hiệp phương sai, mối tương quan là một biện pháp quen thuộc và trực quan hơn với hầu hết. Nó có sự hiệp phương sai được chuẩn hóa bởi sản phẩm của độ lệch chuẩn, và do đó bạn cũng có thể xác định hiệp phương sai về mặt tương quan và độ lệch chuẩn:
Vì vậy, bạn có thể vẽ các mẫu ngẫu nhiên từ phân phối bình thường đa biến bằng cách chỉ định một ma trận tương quan và độ lệch chuẩn? Có, nhưng bạn sẽ cần phải đưa các mẫu trên vào mẫu ma trận trước tiên. Ở đây, S là một vectơ của độ lệch chuẩn, p là ma trận tương quan của chúng và C là ma trận hiệp phương sai (vuông) kết quả (vuông):S is a vector of the standard deviations, P is their correlation matrix, and C is the resulting (square) covariance matrix:
Điều này có thể được thể hiện trong Numpy như sau:
Đầu tiên, nhớ lại một trong những khái niệm cơ bản của điện toán, đó là một byte được tạo thành từ 8 bit. Bạn có thể nghĩ một chút như một chữ số duy nhất là 0 hoặc 1. Một byte chọn hiệu quả trong khoảng từ 0 đến 1 tám lần, do đó, cả
Đầu tiên, nhớ lại một trong những khái niệm cơ bản của điện toán, đó là một byte được tạo thành từ 8 bit. Bạn có thể nghĩ một chút như một chữ số duy nhất là 0 hoặc 1. Một byte chọn hiệu quả trong khoảng từ 0 đến 1 tám lần, do đó, cả
Đầu tiên, nhớ lại một trong những khái niệm cơ bản của điện toán, đó là một byte được tạo thành từ 8 bit. Bạn có thể nghĩ một chút như một chữ số duy nhất là 0 hoặc 1. Một byte chọn hiệu quả trong khoảng từ 0 đến 1 tám lần, do đó, cả
40 ở trên không phải là một lựa chọn ngẫu nhiên. .
Điều này có nghĩa là mỗi byte ánh xạ tới một số nguyên từ 0 đến 255. Nói cách khác, chúng ta sẽ cần hơn 8 bit để thể hiện số nguyên 256. Bạn có thể xác minh điều này bằng cách kiểm tra rằng
50 là một sự trở lại vận chuyển (một phần của dòng mới, trên Windows Systems).
Nếu bạn cần một sự bồi dưỡng trên thập lục phân, mã Charles Petzold,: Ngôn ngữ ẩn là một nơi tuyệt vời cho điều đó. Hex là một hệ thống đánh số cơ sở-16, thay vì sử dụng 0 đến 9, sử dụng 0 đến 9 và A đến F làm chữ số cơ bản của nó.
80 sử dụng ID máy chủ máy của bạn và thời gian hiện tại theo mặc định. Do sự phụ thuộc vào thời gian hiện tại xuống độ phân giải NanoSecond, phiên bản này là nơi UUID có được yêu cầu bảo đảm tính duy nhất theo thời gian.
23, chuyển đổi nó thành một số nguyên lớn và thực hiện một số hoạt động bitwise để tuân thủ đặc điểm kỹ thuật chính thức.
Hy vọng rằng, bây giờ bạn có một ý tưởng tốt về sự khác biệt giữa các loại dữ liệu ngẫu nhiên khác nhau và cách tạo chúng. Tuy nhiên, một vấn đề khác có thể xuất hiện trong đầu là va chạm.
Trong trường hợp này, một vụ va chạm chỉ đơn giản là đề cập đến việc tạo ra hai UUID phù hợp. Cơ hội của điều đó là gì? Chà, về mặt kỹ thuật không phải là bằng không, nhưng có lẽ nó đủ gần: có
90 có thể. Vì vậy, tôi sẽ để nó để bạn đánh giá xem điều này có đủ đảm bảo để ngủ ngon hay không.
Một cách sử dụng phổ biến của >>> random.randint(0, 10)
7
>>> random.randint(500, 50000)
18601
5 là ở Django, có >>> seed(1234)
>>> [random() for _ in range(10)]
[16, 10, 11, 14, 4, 12, 17, 13, 1, 3]
>>> seed(1234)
>>> [random() for _ in range(10)]
[16, 10, 11, 14, 4, 12, 17, 13, 1, 3]
92 thường được sử dụng làm khóa chính trong cơ sở dữ liệu quan hệ cơ bản của mô hình.
Tại thời điểm này, bạn có thể tự hỏi mình tại sao bạn sẽ chỉ mặc định vào phiên bản này? Tại sao không phải là người luôn luôn an toàn, thay vì mặc định các chức năng
Một hàm băm được thiết kế là ánh xạ một chiều từ giá trị đầu vào sang chuỗi có kích thước cố định hầu như không thể đảo ngược kỹ sư. Do đó, trong khi kết quả của hàm băm có thể giống như dữ liệu ngẫu nhiên, nhưng nó không thực sự đủ điều kiện theo định nghĩa ở đây.
Tóm tắt lại
Package/Module
Bạn đã bao phủ rất nhiều nền tảng trong hướng dẫn này. Tóm lại, đây là một so sánh cấp cao về các tùy chọn có sẵn cho bạn về tính ngẫu nhiên kỹ thuật trong Python:
Trang chủ cho một số ít các chức năng để xây dựng số nhận dạng 128 bit
Bài báo bán kết trên Mersienne Twister xuất hiện vào năm 1997, nếu bạn thích loại điều đó.
Các công thức nấu ăn ITERTOOLS xác định các chức năng để chọn ngẫu nhiên từ một tập hợp tổ hợp, chẳng hạn như từ các kết hợp hoặc hoán vị.
Scikit-learn bao gồm các trình tạo mẫu ngẫu nhiên khác nhau có thể được sử dụng để xây dựng các bộ dữ liệu nhân tạo có kích thước và độ phức tạp được kiểm soát.
Eli Bendersky đào sâu vào
>>> random.randrange(1,10)5
3 trong bài viết của mình các phương pháp chậm và nhanh để tạo số nguyên ngẫu nhiên trong Python.
Peter Norvig, một giới thiệu cụ thể về xác suất sử dụng Python cũng là một nguồn tài nguyên toàn diện.
Thư viện PANDAS bao gồm một trình quản lý bối cảnh có thể được sử dụng để đặt trạng thái ngẫu nhiên tạm thời.
Từ Stack Overflow:
Tạo ngày ngẫu nhiên trong một phạm vi nhất định
Cách nhanh nhất để tạo một chuỗi duy nhất giống như ngẫu nhiên với độ dài ngẫu nhiên
Cách sử dụng
>>> random.randrange(1,10)5
9 trên máy phát điện
Thay thế các yếu tố ngẫu nhiên trong một mảng numpy
Nhận số từ /dev /ngẫu nhiên trong Python
Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem cùng với hướng dẫn bằng văn bản để hiểu sâu hơn về sự hiểu biết của bạn: Tạo dữ liệu ngẫu nhiên trong Python This tutorial has a related video course created by the
Real Python team. Watch it together with the written tutorial to deepen your understanding: Generating Random Data in Python
Làm thế nào để Random Random () hoạt động trong Python?
Python xác định một tập hợp các hàm được sử dụng để tạo hoặc thao tác các số ngẫu nhiên thông qua mô -đun ngẫu nhiên.Các chức năng trong mô-đun ngẫu nhiên dựa vào hàm tạo số giả ngẫu nhiên (), tạo ra số float ngẫu nhiên trong khoảng 0,0 đến 1,0.generates a random float number between 0.0 and 1.0.
Có một ngẫu nhiên trong Python?
Mô-đun ngẫu nhiên Python là một mô-đun Python được xây dựng được sử dụng để tạo ra các số ngẫu nhiên.Đây là những số giả ngẫu nhiên có nghĩa là đây không thực sự ngẫu nhiên.Mô -đun này có thể được sử dụng để thực hiện các hành động ngẫu nhiên như tạo số ngẫu nhiên, in ngẫu nhiên một giá trị cho danh sách hoặc chuỗi, v.v.. These are pseudo-random numbers means these are not truly random. This module can be used to perform random actions such as generating random numbers, print random a value for a list or string, etc.