[請益] 樂透系統亂數擾亂的方式

看板PHP作者 (ChaN)時間8年前 (2016/02/15 15:50), 編輯推噓3(3016)
留言19則, 5人參與, 最新討論串1/1
各位好,想請教一下要寫類似運彩的開獎,像是大樂透,用 mt_rand 去亂數的話 據說到一定的數量的話會有規律,不知道有沒有什麼更好的擾亂方式 讓開出來的號碼更為混淆,感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.251.121.168 ※ 文章網址: https://www.ptt.cc/bbs/PHP/M.1455522609.A.696.html

02/15 16:12, , 1F
02/15 16:12, 1F

02/15 16:22, , 2F
mt_rand 要到有規律要很久很久很久 (週期是 2^19937-1)
02/15 16:22, 2F

02/15 16:23, , 3F
所以就放心用吧
02/15 16:23, 3F

02/15 16:38, , 4F
那 mt_rand + shuffle + array_rand 如何
02/15 16:38, 4F

02/15 16:39, , 5F
咦,不對,mt_rand 是 range 取 1
02/15 16:39, 5F

02/15 17:46, , 6F
http://pastebin.com/FdL4ybZ5 請各位幫忙看一下
02/15 17:46, 6F

02/16 01:06, , 7F
sha1(microtime(true) . mt_rand())
02/16 01:06, 7F

02/16 01:07, , 8F
若是加密需要高安全性或博弈扯到大錢,那該用更安全的作法
02/16 01:07, 8F

02/16 01:07, , 9F
讀取 /dev/urandom 或 /dev/random,PHP7 用 random_int()
02/16 01:07, 9F

02/16 01:08, , 10F
然後 PHP7 的 random 系列有人用實作 PHP5 可用的版本
02/16 01:08, 10F

02/16 01:08, , 11F

02/16 01:12, , 12F
mt_rand() 的攻擊有人給出說明,不過我數學不好跟不太上..
02/16 01:12, 12F


02/16 08:31, , 14F
請教一下 sha1 的原因為何
02/16 08:31, 14F

02/16 11:12, , 15F
理論上,sha1是無法從輸出猜測輸入的
02/16 11:12, 15F

02/16 13:09, , 16F
不過sha1出來是40位數的hex(共160bit),轉整數要花點功夫
02/16 13:09, 16F

02/16 13:10, , 17F
轉的時候要小心溢位,PHP整數是32或64bit
02/16 13:10, 17F

02/16 13:11, , 18F
還要注意是 unsigned 轉成 signed...突然覺得這也滿麻煩的
02/16 13:11, 18F

02/17 17:57, , 19F
http://demo.chan15.info/ssc/ 各位可以幫小弟看一下嗎
02/17 17:57, 19F
文章代碼(AID): #1MmOCnQM (PHP)