日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

随机数发生器怎么用_用随机数发生器射击自己的脚

發(fā)布時間:2023/12/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 随机数发生器怎么用_用随机数发生器射击自己的脚 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

隨機數(shù)發(fā)生器怎么用

這將不是解釋隨機數(shù)生成器畢竟不是那么隨機的文章之一。 因此,您中的那些人希望獲得有關(guān)如何破解老虎機,繼續(xù)前進(jìn)的指南,在這里什么也看不到。

相反,它是有關(guān)一個不太常見的鎖爭用問題的帖子,該問題隱藏在Java API的隨機數(shù)生成器中。

要打開該主題,讓我們開始研究如何在java.util.Random類中處理并發(fā)。 java.util.Random的實例是線程安全的。 但是,在線程之間并發(fā)使用同一java.util.Random實例是同步的,并且正如我們發(fā)現(xiàn)的那樣,它傾向于觸發(fā)影響應(yīng)用程序性能的爭用問題。

在您日常的日常企業(yè)應(yīng)用程序中,這聽起來似乎不是一個重要的問題–畢竟,您實際上有多少次實際執(zhí)行了故意無法預(yù)測的事情? 相反,您只是在按照可預(yù)見的方式遵循業(yè)務(wù)規(guī)則。 我必須承認(rèn),盡管在某些情況下,這些業(yè)務(wù)規(guī)則比真正的隨機種子生成算法所涉及的熵甚至更大,但這完全是另一回事。

但是魔鬼隱藏在細(xì)節(jié)中,在這種情況下,碰巧是java.util.Random的子類,即java.util.SecureRandom 。 此類,如名稱所述,應(yīng)在隨機數(shù)生成器的結(jié)果必須是加密安全的情況下使用。 出于人類未知的原因,在通常不希望隨機性的密碼安全方面具有重要意義的情況下,已將該實現(xiàn)選擇為許多常見API的主干。

我們通過密切關(guān)注鎖爭用檢測解決方案的采用來親身體驗這個問題。 根據(jù)結(jié)果??,通過看起來無辜的java.io.File.createTempFile()調(diào)用觸發(fā)Java應(yīng)用程序中最常見的鎖定問題之一。 在后臺,這種臨時文件的創(chuàng)建依賴于SecureRandom類來計算文件的名稱。

private static final SecureRandom random = new SecureRandom(); static File generateFile(String prefix, String suffix, File dir) {long n = random.nextLong();if (n == Long.MIN_VALUE) {n = 0; // corner case} else {n = Math.abs(n);}return new File(dir, prefix + Long.toString(n) + suffix); }

然后,當(dāng)調(diào)用nextLong時,SecureRandom最終調(diào)用其方法nextBytes() ,該方法定義為synced :

synchronized public void nextBytes(byte[] bytes) {secureRandomSpi.engineNextBytes(bytes); }

有人會說,如果我在每個線程中創(chuàng)建新的SecureRandom,我將不會遇到任何問題。 不幸的是,這并不是那么簡單。 SecureRandom使用java.security.SecureRandomSpi的實現(xiàn),無論如何最終都會爭奪它(您可能會在Jenkins問題跟蹤器中看到以下帶有一些基準(zhǔn)的bug討論)

這與某些應(yīng)用程序使用模式結(jié)合在一起(尤其是如果您有許多SSL連接依靠SecureRandom來實現(xiàn)其加密握手魔術(shù)),則有形成長期持久爭用問題的趨勢。

如果您可以控制源代碼,則解決此問題的方法很簡單–只需重建解決方案即可依靠java.util.ThreadLocalRandom進(jìn)行多線程設(shè)計。 如果您堅持使用標(biāo)準(zhǔn)API,則解決方案可能會更加復(fù)雜,并且需要大量重構(gòu)。

故事的道德啟示? 并發(fā)很難。 尤其是在您的系統(tǒng)構(gòu)建模塊未考慮到這一點的情況下。 無論如何,我確實希望這篇文章至少從兩個新庫的誕生中拯救世界,在新庫中,隨機數(shù)生成器將成為競爭點。

翻譯自: https://www.javacodegeeks.com/2015/03/shooting-yourself-in-the-foot-with-random-number-generators.html

隨機數(shù)發(fā)生器怎么用

總結(jié)

以上是生活随笔為你收集整理的随机数发生器怎么用_用随机数发生器射击自己的脚的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。