新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 從Linux內核中獲取真隨機數

        從Linux內核中獲取真隨機數

        作者: 時間:2016-10-08 來源:網絡 收藏

        [38070.575481] We get random number: 240443446

        [38070.575485] We get random number: -606998911

        [38070.575489] We get random number: 538794850

        [38070.575493] We get random number: -500786675

        [38070.575497] We get random number: -1240394927

        [38070.575501] We get random number: 1233931345

        [38070.575504] We get random number: 1488497117

        [38070.575508] We get random number: -177688514

        /dev/random /dev/urandom

        這兩個特殊設備都是字符型設備。我們可以在用戶空間通過read系統調用讀這兩個設備文件以此獲取隨機數。這兩個設備文件的區別在于:如果內核熵池的估計值為0時,

        /dev/random將被阻塞,而/dev/urandom不會有這個限制。

        #include

        #include

        #include

        #include

        #include

        /* 從min和max中返回一個隨機值 */

        int random_number(int min, int max)

        {

        static int dev_random_fd = -1;

        char *next_random_byte;

        int bytes_to_read;

        unsigned random_value;

        assert(max > min);

        if (dev_random_fd == -1)

        {

        dev_random_fd = open(/dev/random, O_RDONLY);

        assert(dev_random_fd != -1);

        }

        next_random_byte = (char *)random_value;

        bytes_to_read = sizeof(random_value);

        /* 因為是從/dev/random中讀取,read可能會被阻塞,一次讀取可能只能得到一個字節,

        * 循環是為了讓我們讀取足夠的字節數來填充random_value.

        */

        do

        {

        int bytes_read;

        bytes_read = read(dev_random_fd, next_random_byte, bytes_to_read);

        bytes_to_read -= bytes_read;

        next_random_byte += bytes_read;

        }while(bytes_to_read > 0);

        return min + (random_value % (max - min + 1));

        }

        同樣,還可以用dd命令從/dev/urandom中獲取指定字節數的隨機值并寫入文件中保存--如果你需要以文件的形式提供隨機數的話。

        dd if=/dev/urandom of = file count = 1 bs = bytes


        上一頁 1 2 下一頁

        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 介休市| 集贤县| 望城县| 盱眙县| 许昌市| 开原市| 绥阳县| 格尔木市| 光山县| 临西县| 铁岭县| 南乐县| 唐河县| 大关县| 酒泉市| 富宁县| 乐都县| 舟曲县| 南溪县| 崇州市| 武城县| 钟祥市| 金华市| 铁力市| 武山县| 普兰县| 泸州市| 龙江县| 综艺| 涪陵区| 右玉县| 蕲春县| 巴彦淖尔市| 房山区| 长沙市| 岗巴县| 沿河| 桦川县| 宿松县| 开封县| 华坪县|