計算機的隨機數是如何產生的?

隨機數的做用

隨機數在咱們平常是一個很是經常使用的東西,不管數據加密仍是搖骰子,目的都是要結果不可肯定,不管什麼結果都存在必定的機率。可是在咱們的計算機中隨機數究竟是怎麼產生的?java

真假隨機數產生原理

大部分程序和編程語言確實產生的隨機數都是僞隨機數,好比像C語言,經常採用線性同餘或者經過一個種子產生的僞隨機數字,都是存在必定的規律可循。像咱們經常使用的高級編程語言java也是相似。例如java中獲取整數某個範圍內的數字源碼:編程

final int internalNextInt(int origin, int bound) {
    if (origin < bound) {
        int n = bound - origin;
        if (n > 0) {
            return nextInt(n) + origin;
        }
        else {  // range not representable as int
            int r;
            do {
                r = nextInt();
            } while (r < origin || r >= bound);
            return r;
        }
    }
    else {
        return nextInt();
    }
}

這也就證實了若是知道了這些種子,或者根據已經產生的隨機數字,就可以預測下一個可能產生的數字。微信

說到這裏,咱們反過來想想,真正的隨機數真的不存在嗎?像銀行就常常提示你們密碼不要用本身的生日,身份證號中某幾位數字或者本身的手機號,由於這樣隨時可能存在被破解的可能,咱們要儘可能使用一些隨機數字,好比說某個路口,在第一分鐘走了幾我的做爲你密碼的第一位,而後依次排列,這個數字就是隨機的。一樣咱們的計算機若是單純依賴於程序,可能就不存在真正的隨機數,若是把計算機軟件和外部硬件結合起來。好比說收集CPU天天轉速以及溫度,甚至某我的敲打鍵盤的頻率,磁盤寫入速度,等等信號。這樣也就產生了「純粹「的隨機數。 unix操做系統也就存在一個熵池,經過熵池來收集一些隨機值,這樣也就產生了真正意義上的隨機數字。編程語言

若有問題請微信掃碼回覆 輸入圖片說明加密

相關文章
相關標籤/搜索