最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Python·為什么說(shuō)random模塊不安全

2023-07-01 21:16 作者:Yuro丶o(jì)uu  | 我要投稿

在Python文檔關(guān)于Random模塊的地方有如下警告,這是為什么呢

偽隨機(jī)數(shù)的概念

真正意義上的隨機(jī)數(shù)(或者隨機(jī)事件)在某次產(chǎn)生過(guò)程中是按照實(shí)驗(yàn)過(guò)程中表現(xiàn)的分布概率隨機(jī)產(chǎn)生的,其結(jié)果是不可預(yù)測(cè)的,是不可見的。而計(jì)算機(jī)中的隨機(jī)函數(shù)是按照一定算法模擬產(chǎn)生的,其結(jié)果是確定的,是可見的。我們可以這樣認(rèn)為這個(gè)可預(yù)見的結(jié)果其出現(xiàn)的概率是100%。所以用計(jì)算機(jī)隨機(jī)函數(shù)所產(chǎn)生的“隨機(jī)數(shù)”并不隨機(jī),是偽隨機(jī)數(shù)。

Python層面分析

這里我們生成了一個(gè)包含10個(gè)隨機(jī)2位整數(shù)的列表

每次運(yùn)行得出來(lái)的結(jié)果肯定是不一樣的,這是為什么呢,我們來(lái)一步步分析原理

我們按住Ctrl點(diǎn)擊random(這里用的Pycharm,用IDLE的就手動(dòng)跳轉(zhuǎn)吧hhh),跳到random的定義處看看

可以看到如下所示的代碼塊,熟悉類的朋友一眼就能看出來(lái),_inst就是Random這個(gè)類的實(shí)例

然后將類方法導(dǎo)出為模塊級(jí)函數(shù),方便用戶使用

了解一個(gè)類,那么肯定先去看看他的構(gòu)造函數(shù)里干了些什么,跳到Random處看看

可以看到只有一個(gè)類方法調(diào)用和一個(gè)類變量的初始化,那么我們自然是先去看看這個(gè)類方法干了些什么

讀注釋你應(yīng)該也能看明白這個(gè)方法是干什么的,用來(lái)改變隨機(jī)數(shù)生成器的種子

那么我們繼續(xù)分析它的流程

一個(gè)if判斷version和a的類型,顯而易見這倆條件都不滿足,直接走到下面

調(diào)用了 super().seed(a) ,回到前面我們我可以發(fā)現(xiàn)這個(gè)類繼承了

_random.Random,那么我們繼續(xù)跳到這個(gè)類的seed方法看看

看到這里有些人會(huì)覺得很奇怪,哎為什么這個(gè)方法里啥都沒寫,因?yàn)檫@里是c語(yǔ)言寫的

現(xiàn)在可以選擇讀注釋,當(dāng)然我們知道,解釋器是CPython,而且他是開源的!那么繼續(xù)往前沖,看看CPython的源碼這里是怎么寫的

Github指路:?https://github.com/python/cpython

CPython分析

找到 ../Modules/_randommodule.c

讀注釋我們可以知道他用的隨機(jī)數(shù)生成器是 Mersenne Twister

然后找到如下函數(shù),可以知道,當(dāng)參數(shù)傳參為None時(shí),調(diào)用了?

random_seed_time_pid

這里就可以知道他是通過(guò)獲取系統(tǒng)當(dāng)前時(shí)間進(jìn)程ID來(lái)初始化隨機(jī)數(shù)生成器的,用當(dāng)前時(shí)間來(lái)初始化隨機(jī)數(shù)生成器也是很常用的一種方式

源碼的分析就到這里了,從Python層面到底層CPython,雖然過(guò)程很麻煩,但這樣能讓我們更好的了解他,這也是學(xué)習(xí)的一個(gè)很好的方式

整理一下,當(dāng)你直接使用random.randint時(shí),Random類內(nèi)部默認(rèn)調(diào)用seed(None),然后使用系統(tǒng)當(dāng)前時(shí)間和pid來(lái)初始化隨機(jī)數(shù)生成器,這樣當(dāng)你每一次啟動(dòng)程序時(shí)產(chǎn)生的隨機(jī)數(shù)都不一樣了

安全性問題分析

終于講到正題了,講了這么多,應(yīng)該已經(jīng)有朋友明白了,一旦逆向分析者知道了seed,那么規(guī)律不就顯而易見了嗎

是這樣的,我們實(shí)踐操作一樣,現(xiàn)在你會(huì)發(fā)現(xiàn)

每次重啟程序,得到的結(jié)果都是一樣的了


參考資料

Python文檔 - random模塊?

https://docs.python.org/zh-cn/3/library/random.html

CPython源碼

https://github.com/python/cpython

關(guān)于安全性:為什么Python中random.random()不安全?

https://www.codenong.com/54672594/

隨機(jī)數(shù):真隨機(jī)數(shù)和偽隨機(jī)數(shù)?

https://blog.csdn.net/czc1997/article/details/78167705

看了那么多為什么還不三連!?

看了那么多為什么還不三連!?

看了那么多為什么還不三連?。?/strong>

Python·為什么說(shuō)random模塊不安全的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
元江| 肃宁县| 平阳县| 长治市| 朝阳县| 龙胜| 汾阳市| 讷河市| 铁岭县| 沭阳县| 沁阳市| 靖江市| 焉耆| 义乌市| 闻喜县| 洮南市| 呼图壁县| 五华县| 邢台县| 宁阳县| 饶阳县| 子洲县| 上饶市| 门源| 宜黄县| 香港 | 凤山市| 漾濞| 项城市| 彩票| 图们市| 进贤县| 南木林县| 木兰县| 黑水县| 苍溪县| 诏安县| 信阳市| 大渡口区| 洛宁县| 博白县|