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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

线性同余法生成随机数Matlab_生成安全的随机数

發布時間:2024/8/1 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线性同余法生成随机数Matlab_生成安全的随机数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

0x01:生產隨機數的方式

  • Math.random()0到1之間隨機數
  • java.util.Random偽隨機數(線性同余法生成)
  • java.security.SecureRandom真隨機數
  • java.util.concurrent.ThreadLocalRandom每一個線程有一個獨立的隨機數生成器

0x02:Math.random()

Math.random()產生的隨機數是在0 到1之間的一個double類型的隨機數,即 0 <= random <= 1

例子

public static void main(String[] args) { for(int i=0; i<10; i++){ System.out.println(Math.random()); } }

結果

0.55618691753422430.86408888351504140.2928147316268310.98735487802474750.323925041909681970.0232301114478186130.79118793895482530.64530781588057550.82554439407429070.0476070934096563

看下圖

從源碼分析發現,調用Math.random()方法時,自動創建了一個偽隨機數生成器,實際上用的是new java.util.Random()。

0x03:java.util.Random偽隨機數

java.util.Random采用線性同余法偽隨機數生成器(linear congruential pseudorandom number generator [簡稱LGC]),所以該隨機數具有可預測性的缺點。在注重信息安全的應用中,不要使用 LCG 算法生成隨機數,請使用 java.security.SecureRandom。

例子

public static void main(String[] args) { Random random = new Random(); for(int i=0; i<10; i++){ System.out.println(random.nextInt()); } }

結果

-932663432-1051420847-1702465501965458676-201833620613997342061142954832-1274289135918821980-537649235

java.util.Random類默認使用當前系統時鐘作為種子

Random類提供的方法:

  • java.util.nextBoolean() - 返回均勻分布的 true 或者 false
  • nextBytes(byte[] bytes)
  • nextDouble() - 返回 0.0 到 1.0 之間的均勻分布的 double,Math.random() 調用的就是該方法
  • nextFloat() - 返回 0.0 到 1.0 之間的均勻分布的 float
  • nextGaussian() - 返回 0.0 到 1.0 之間的高斯分布(即正態分布)的 double
  • nextInt() - 返回均勻分布的 int
  • nextInt(int n) - 返回 0 到 n 之間的均勻分布的 int (包括 0,不包括 n)
  • nextLong() - 返回均勻分布的 long
  • setSeed(long seed) - 設置種子

另外只要種子一樣,產生的隨機數也一樣; 因為種子確定,隨機數算法也就確定了,所以輸出是確定的。

例子

public static void main(String[] args) { Random random1 = new Random(1000); Random random2 = new Random(1000); for(int i=0; i<10; i++){ System.out.println("random1 = "+ random1.nextInt() +

總結

以上是生活随笔為你收集整理的线性同余法生成随机数Matlab_生成安全的随机数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。