随机数生成器python_python安全开发军规之四:使用安全的随机数生成器
背景
日常開發中,必然會碰到需要生成隨機數的需求,比如生成圖片驗證碼,短信驗證碼……隨機數生成既然是這么簡單的一個功能,開發必然也很簡單,我們看看怎么生成一個隨機數,這里以隨機生成1-100的整數為例。
普通程序員的寫法
import random
random.randint(1,100)
只用了兩行代碼,程序員小Z就寫出了一個隨機數。
QA有話說
隨機模塊提供的隨機生成器是偽隨機數生成器。所謂偽隨機數,是通過固定的算法生成的,其結果是確定的,可預見的。一般情況下,偽隨機數的生成需要一個種子,如果沒有特別設置,種子就是系統的時鐘。簡而言之,由于偽隨機數算法固定,種子固定,那結果就是可推導和模擬的。那這里的隨機也就不是真正的隨機,只要在隨機數生成過程中有一點偏差,破譯者就能夠利用偏差對保密信息進行破譯。
實際上,在密碼學上對隨機性有三個分類:偽隨機序列,密碼學意義上的偽隨機序列,真隨機序列。
前面小Z寫的程序就類屬于偽隨機序列,1-100中每個數出現的頻率相等或近似相等。
而真隨機序列則要求隨機數不能重復產生,且不能由已知的任意數推導出來。意味著,即使在相同的操作條件下,用完全相同的輸入,隨機數生成器生成的兩個隨機數也是不一樣的,即兩次生成的結果是不重復的且完全獨立的。
由于真隨機序列大多需要硬件支持,有一種折衷的方案,也就是密碼學意義上的偽隨機序列。密碼學意義的偽隨機序列要求即使知道前一次的生成,不能預測下一次生成的隨機數。
高級程序員的寫法
import secrets
secret_generator=secrets.SystemRandom()
secret_generator.randint(1,100)
小結
python在3.6版本添加了secrets模塊,使用同步方法生成隨機數據,以確保沒有兩個進程可以同時獲得相同的數據。這個模塊的功能很多,可以進一步發掘,常用于敏感信息保護的場景,常用的有生成隨機數,從確定序列中隨機取值,生成token。
總結
以上是生活随笔為你收集整理的随机数生成器python_python安全开发军规之四:使用安全的随机数生成器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AI大牛“认输”退网:多人种人脸数据可以
- 下一篇: 怎么搭建网校系统,培训机构搭建专属网校平