簡體   English   中英

我可以用 python 生成真實的隨機數嗎?

[英]Can I generate authentic random number with python?

我正在學習 python 的隨機模塊。我知道它會生成偽隨機數。 它的核心思想是使用高頻時鍾作為種子,然后使用 function 產生一個“看起來像隨機數”。

據我所知,在現實世界中甚至不可能產生真實的隨機數。

但是我知道Unix隨機生成器引入了一些其他因素,比如鼠標移動軌跡參數,IO響應時間,給它的隨機數生成器function引入了不確定性。通過它我們可以得到比普通偽隨機數更好的隨機數. 這更難預測。

那么,有沒有辦法在 python 中產生這樣一個隨機數,或者導入一個好的第三方庫?

random模塊的文檔是這樣說的:

警告:該模塊的偽隨機生成器不應用於安全目的。 使用os.urandom()SystemRandom如果你需要加密安全偽隨機數發生器。

真正的隨機數可以從

https://pypi.python.org/pypi/quantumrandom/

pip install quantumrandom

目前,您僅限於 1024 個塊,但通過一些簡單的編程和一點時間,您將能夠將此限制擴展到足夠大的樣本,適用於大多數應用程序。

https://www.random.org/integers/
https://api.random.org/json-rpc/1/

該網站通過大氣白噪聲生成隨機數,這比用於開發的偽隨機數要好,您也可以使用那里的 API 自動隨機數(盡管它目前處於測試階段不會免費。)

另一種獲得真隨機數的方法是通過量子隨機數發生器, http://photonics.anu.edu.au/qoptics/Research/qrng.php

重申之前有人說過的話,出於安全目的,您應該避免使用計算生成的偽隨機數。

Python 沒有任何東西可以讓您生成“真正隨機”或“真實隨機”數字,因為它們均勻分布並且獨立於其他所有內容(尤其是后者)。

無論如何,“偽隨機”和“真正隨機”數字之間的區別並不是應用程序關心的。 相反,隨機性的要求取決於應用程序,並且您並沒有真正指定您想要什么樣的應用程序。 例如,一般來說:

  • 安全應用程序關心數字是否難以猜測; 在這種情況下,只有加密 RNG 才能滿足這一要求(即使是依賴於偽隨機數生成器的)。 Python 示例是secrets模塊或random.SystemRandom
  • 科學模擬關心這些數字的行為是否像獨立的均勻隨機數,並且通常關心這些數字在以后是否可重現。 Python 示例是numpy.random.Generatorrandom.Random

另請參閱以下問題:

我認為這有效:

def get_truly_random_seed_through_os() -> int:
    """
    Usually the best random sample you could get in any programming language is generated through the operating system. 
    In Python, you can use the os module.

    source: https://stackoverflow.com/questions/57416925/best-practices-for-generating-a-random-seeds-to-seed-pytorch/57416967#57416967
    """
    RAND_SIZE = 4
    random_data = os.urandom(
        RAND_SIZE
    )  # Return a string of size random bytes suitable for cryptographic use.
    random_seed: int = int.from_bytes(random_data, byteorder="big")
    return int(random_seed)

如果你只想要不同的種子,你可以這樣做:

def get_different_pseudo_random_seed_every_time_using_time() -> int:
    import random
    import time

    # random.seed(int(time.time()))
    seed: int = int(time.time())
    return seed

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM