-
當(dāng)前位置:首頁 > 創(chuàng)意學(xué)院 > 營銷推廣 > 專題列表 > 正文
強偽隨機數(shù)安全嗎
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于強偽隨機數(shù)安全嗎的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,有小程序、在線網(wǎng)頁版、PC客戶端和批量生成器
問友Ai官網(wǎng):https://ai.de1919.com。
本文目錄:
為什么說Java中的隨機數(shù)都是偽隨機數(shù)
什么是偽隨機數(shù)?1.偽隨機數(shù)是看似隨機實質(zhì)是固定的周期性序列,也就是有規(guī)則的隨機。
2.只要這個隨機數(shù)是由確定算法生成的,那就是偽隨機,只能通過不斷算法優(yōu)化,使你的隨機數(shù)更接近隨機。
(隨機這個屬性和算法本身就是矛盾的)
3.通過真實隨機事件取得的隨機數(shù)才是真隨機數(shù)。
Java隨機數(shù)產(chǎn)生原理:
Java的隨機數(shù)產(chǎn)生是通過線性同余公式產(chǎn)生的,也就是說通過一個復(fù)雜的算法生成的。
偽隨機數(shù)的不安全性:
Java自帶的隨機數(shù)函數(shù)是很容易被黑客綠色的,因為黑客可以通過獲取一定長度的隨機數(shù)序列來推出你的seed,然后就可以預(yù)測下一個隨機數(shù)。
不用種子的不隨機性會增大的原因:
java.Math.Random()實際是在內(nèi)部調(diào)用java.util.Random()的,使用一個和當(dāng)前系統(tǒng)時間有關(guān)的數(shù)字作為種子數(shù)。兩個隨機數(shù)就很可能相同。
double a = Math.random();
double b = Math.random();
Random r1 = new Random();
r1.nextInt(10);
Random r2 = new Random();
r2.nextInt(10);
Java中產(chǎn)生隨機數(shù)的方法有兩種:
第一種:Math.random()
第二種:new Random()
一、java.lang.Math.Random:
調(diào)用這個Math.Random()函數(shù)能夠返回帶正號的double值,取值范圍是[0.0,1.0),在該范圍內(nèi)(近似)均勻分布。因為返回值是double類型的,小數(shù)點后面可以保留15位小數(shù),所以產(chǎn)生相同的可能性非常小,在這一定程度上是隨機數(shù)。
二、java.util.Random:
Random r1 = new Random();
Random r2 = new Random();
Random r3 = new Random(10);
Random r4 = new Random(10);
下面Random()的兩種構(gòu)造方法:
Random():使用一個和當(dāng)前系統(tǒng)時間對應(yīng)的相對時間有關(guān)的數(shù)字作為種子數(shù)。
Random(long seed):直接傳入一個種子數(shù)。
種子的作用是什么?
種子就是產(chǎn)生隨機數(shù)的第一次使用值,機制是通過一個函數(shù),將這個種子的值轉(zhuǎn)化為隨機數(shù)空間中的某一個點上,并且產(chǎn)生的隨機數(shù)均勻的散布在空間中。以后產(chǎn)生的隨機數(shù)都與前一個隨機數(shù)有關(guān)。
舉例:
Random r =new Random(100);
System.out.println(r.nextInt(20));
種子數(shù)只是隨機算法的起源數(shù)字,和生成的隨機數(shù)字的區(qū)間沒有任何關(guān)系。
初始化時100并沒有起直接作用(注意:不是沒有起作用),r.nextInt(20)中的20是隨機數(shù)的上限,產(chǎn)生的隨機數(shù)為0-20的整數(shù),不包括20。
以上就是關(guān)于強偽隨機數(shù)安全嗎相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。
推薦閱讀:
庭院花園設(shè)計公司(庭院花園設(shè)計公司長沙)