Skip to content
This repository was archived by the owner on Oct 5, 2022. It is now read-only.
This repository was archived by the owner on Oct 5, 2022. It is now read-only.

Uh-oh! Random number generator is not pseudorandom™ #130

Open

Description

@multiwebinc
$rand  = $this->psl['crypt/rand'];
for ($i=0; $i<10000; $i++) {
  $num = floor($rand->int(0, 1000000) / 1000);
  if (isset($used[$num])) {
    $used[$num]++;
  }
  else {
    $used[$num] = 1;
  }
}
ksort($used);
print_r($used);

Here is the output. As you can see it is pretty much a standard normal distribution curve right in the middle of the range:

Array
(
    [479] => 1
    [480] => 2
    [481] => 1
    [482] => 1
    [483] => 4
    [484] => 11
    [485] => 26
    [486] => 26
    [487] => 63
    [488] => 89
    [489] => 162
    [490] => 225
    [491] => 345
    [492] => 401
    [493] => 509
    [494] => 617
    [495] => 770
    [496] => 792
    [497] => 853
    [498] => 896
    [499] => 830
    [500] => 738
    [501] => 675
    [502] => 489
    [503] => 411
    [504] => 333
    [505] => 253
    [506] => 212
    [507] => 91
    [508] => 73
    [509] => 51
    [510] => 25
    [511] => 12
    [512] => 5
    [513] => 6
    [514] => 1
    [518] => 1
)

Why not just use mt_rand()?

Activity

  1. multiwebinc commented on Sep 9, 2014

    @multiwebinc
    Author

    By the way, the current RNG is ridiculously slow for large ranges while mt_rand() is almost instant.

    Oh, and here's the output for the same code using mt_rand():

    Array
    (
        [0] => 9
        [1] => 8
        [2] => 15
        [3] => 10
        [4] => 7
        [5] => 9
        [6] => 6
        [7] => 7
        [8] => 8
        [9] => 11
        [10] => 15
        [11] => 8
        [12] => 9
        [13] => 13
        [14] => 10
        [15] => 8
        [16] => 13
        [17] => 10
        [18] => 12
        [19] => 10
        [20] => 10
        [21] => 6
        [22] => 9
        [23] => 13
        [24] => 15
        [25] => 8
        [26] => 14
        [27] => 8
        [28] => 7
        [29] => 10
        [30] => 7
        [31] => 10
        [32] => 8
        [33] => 12
        [34] => 9
        [35] => 4
        [36] => 6
        [37] => 8
        [38] => 6
        [39] => 11
        [40] => 4
        [41] => 13
        [42] => 11
        [43] => 5
        [44] => 8
        [45] => 10
        [46] => 15
        [47] => 10
        [48] => 9
        [49] => 10
        [50] => 10
        [51] => 10
        [52] => 11
        [53] => 10
        [54] => 11
        [55] => 10
        [56] => 11
        [57] => 16
        [58] => 8
        [59] => 9
        [60] => 8
        [61] => 11
        [62] => 12
        [63] => 9
        [64] => 7
        [65] => 11
        [66] => 10
        [67] => 9
        [68] => 12
        [69] => 8
        [70] => 12
        [71] => 13
        [72] => 13
        [73] => 12
        [74] => 7
        [75] => 13
        [76] => 8
        [77] => 7
        [78] => 8
        [79] => 10
        [80] => 8
        [81] => 12
        [82] => 11
        [83] => 8
        [84] => 10
        [85] => 8
        [86] => 10
        [87] => 12
        [88] => 7
        [89] => 18
        [90] => 12
        [91] => 4
        [92] => 10
        [93] => 4
        [94] => 9
        [95] => 7
        [96] => 12
        [97] => 7
        [98] => 11
        [99] => 10
        [100] => 2
        [101] => 7
        [102] => 16
        [103] => 12
        [104] => 11
        [105] => 9
        [106] => 6
        [107] => 12
        [108] => 16
        [109] => 7
        [110] => 10
        [111] => 9
        [112] => 10
        [113] => 10
        [114] => 14
        [115] => 10
        [116] => 13
        [117] => 8
        [118] => 10
        [119] => 10
        [120] => 10
        [121] => 10
        [122] => 13
        [123] => 8
        [124] => 7
        [125] => 3
        [126] => 11
        [127] => 7
        [128] => 10
        [129] => 14
        [130] => 10
        [131] => 13
        [132] => 10
        [133] => 8
        [134] => 6
        [135] => 8
        [136] => 15
        [137] => 8
        [138] => 6
        [139] => 14
        [140] => 12
        [141] => 8
        [142] => 8
        [143] => 14
        [144] => 12
        [145] => 9
        [146] => 8
        [147] => 8
        [148] => 9
        [149] => 11
        [150] => 8
        [151] => 10
        [152] => 10
        [153] => 13
        [154] => 8
        [155] => 13
        [156] => 14
        [157] => 11
        [158] => 10
        [159] => 6
        [160] => 9
        [161] => 15
        [162] => 9
        [163] => 9
        [164] => 10
        [165] => 12
        [166] => 12
        [167] => 7
        [168] => 12
        [169] => 13
        [170] => 10
        [171] => 8
        [172] => 13
        [173] => 12
        [174] => 7
        [175] => 10
        [176] => 18
        [177] => 14
        [178] => 13
        [179] => 13
        [180] => 9
        [181] => 8
        [182] => 8
        [183] => 11
        [184] => 5
        [185] => 12
        [186] => 13
        [187] => 15
        [188] => 10
        [189] => 12
        [190] => 8
        [191] => 9
        [192] => 10
        [193] => 7
        [194] => 9
        [195] => 8
        [196] => 13
        [197] => 10
        [198] => 12
        [199] => 8
        [200] => 5
        [201] => 12
        [202] => 13
        [203] => 13
        [204] => 7
        [205] => 6
        [206] => 7
        [207] => 7
        [208] => 9
        [209] => 11
        [210] => 8
        [211] => 14
        [212] => 11
        [213] => 11
        [214] => 6
        [215] => 10
        [216] => 9
        [217] => 12
        [218] => 13
        [219] => 7
        [220] => 10
        [221] => 10
        [222] => 5
        [223] => 6
        [224] => 6
        [225] => 7
        [226] => 3
        [227] => 8
        [228] => 5
        [229] => 8
        [230] => 9
        [231] => 9
        [232] => 16
        [233] => 11
        [234] => 8
        [235] => 12
        [236] => 11
        [237] => 7
        [238] => 11
        [239] => 15
        [240] => 8
        [241] => 8
        [242] => 3
        [243] => 9
        [244] => 9
        [245] => 5
        [246] => 8
        [247] => 4
        [248] => 11
        [249] => 10
        [250] => 8
        [251] => 12
        [252] => 8
        [253] => 15
        [254] => 7
        [255] => 12
        [256] => 16
        [257] => 7
        [258] => 10
        [259] => 10
        [260] => 7
        [261] => 13
        [262] => 11
        [263] => 13
        [264] => 11
        [265] => 8
        [266] => 8
        [267] => 9
        [268] => 13
        [269] => 12
        [270] => 13
        [271] => 9
        [272] => 19
        [273] => 15
        [274] => 12
        [275] => 7
        [276] => 8
        [277] => 18
        [278] => 10
        [279] => 5
        [280] => 7
        [281] => 11
        [282] => 13
        [283] => 6
        [284] => 7
        [285] => 8
        [286] => 10
        [287] => 7
        [288] => 10
        [289] => 3
        [290] => 11
        [291] => 8
        [292] => 15
        [293] => 10
        [294] => 8
        [295] => 9
        [296] => 11
        [297] => 12
        [298] => 10
        [299] => 5
        [300] => 12
        [301] => 12
        [302] => 12
        [303] => 11
        [304] => 11
        [305] => 13
        [306] => 11
        [307] => 7
        [308] => 5
        [309] => 13
        [310] => 8
        [311] => 10
        [312] => 9
        [313] => 7
        [314] => 9
        [315] => 16
        [316] => 15
        [317] => 10
        [318] => 5
        [319] => 11
        [320] => 12
        [321] => 8
        [322] => 7
        [323] => 6
        [324] => 13
        [325] => 9
        [326] => 12
        [327] => 14
        [328] => 12
        [329] => 14
        [330] => 12
        [331] => 7
        [332] => 11
        [333] => 9
        [334] => 5
        [335] => 11
        [336] => 9
        [337] => 3
        [338] => 16
        [339] => 10
        [340] => 9
        [341] => 14
        [342] => 6
        [343] => 8
        [344] => 9
        [345] => 14
        [346] => 8
        [347] => 7
        [348] => 11
        [349] => 7
        [350] => 9
        [351] => 14
        [352] => 13
        [353] => 8
        [354] => 10
        [355] => 10
        [356] => 11
        [357] => 15
        [358] => 10
        [359] => 12
        [360] => 6
        [361] => 4
        [362] => 7
        [363] => 8
        [364] => 7
        [365] => 12
        [366] => 13
        [367] => 13
        [368] => 12
        [369] => 7
        [370] => 12
        [371] => 8
        [372] => 9
        [373] => 10
        [374] => 10
        [375] => 17
        [376] => 9
        [377] => 6
        [378] => 6
        [379] => 8
        [380] => 8
        [381] => 7
        [382] => 13
        [383] => 13
        [384] => 8
        [385] => 11
        [386] => 8
        [387] => 18
        [388] => 13
        [389] => 8
        [390] => 7
        [391] => 8
        [392] => 5
        [393] => 5
        [394] => 10
        [395] => 17
        [396] => 4
        [397] => 12
        [398] => 11
        [399] => 11
        [400] => 7
        [401] => 10
        [402] => 13
        [403] => 7
        [404] => 15
        [405] => 17
        [406] => 13
        [407] => 7
        [408] => 14
        [409] => 8
        [410] => 6
        [411] => 6
        [412] => 12
        [413] => 6
        [414] => 9
        [415] => 6
        [416] => 16
        [417] => 12
        [418] => 5
        [419] => 10
        [420] => 7
        [421] => 12
        [422] => 8
        [423] => 11
        [424] => 8
        [425] => 11
        [426] => 6
        [427] => 11
        [428] => 8
        [429] => 8
        [430] => 8
        [431] => 12
        [432] => 7
        [433] => 10
        [434] => 6
        [435] => 12
        [436] => 13
        [437] => 9
        [438] => 9
        [439] => 11
        [440] => 8
        [441] => 5
        [442] => 13
        [443] => 5
        [444] => 10
        [445] => 9
        [446] => 12
        [447] => 10
        [448] => 5
        [449] => 8
        [450] => 8
        [451] => 14
        [452] => 8
        [453] => 6
        [454] => 10
        [455] => 10
        [456] => 17
        [457] => 7
        [458] => 10
        [459] => 11
        [460] => 6
        [461] => 8
        [462] => 6
        [463] => 8
        [464] => 10
        [465] => 8
        [466] => 9
        [467] => 8
        [468] => 8
        [469] => 7
        [470] => 10
        [471] => 9
        [472] => 11
        [473] => 9
        [474] => 10
        [475] => 11
        [476] => 14
        [477] => 11
        [478] => 11
        [479] => 15
        [480] => 6
        [481] => 9
        [482] => 7
        [483] => 21
        [484] => 7
        [485] => 11
        [486] => 8
        [487] => 11
        [488] => 10
        [489] => 17
        [490] => 7
        [491] => 15
        [492] => 12
        [493] => 15
        [494] => 9
        [495] => 9
        [496] => 8
        [497] => 13
        [498] => 13
        [499] => 10
        [500] => 9
        [501] => 14
        [502] => 8
        [503] => 8
        [504] => 14
        [505] => 18
        [506] => 8
        [507] => 10
        [508] => 8
        [509] => 11
        [510] => 9
        [511] => 11
        [512] => 4
        [513] => 15
        [514] => 11
        [515] => 8
        [516] => 6
        [517] => 6
        [518] => 10
        [519] => 10
        [520] => 11
        [521] => 11
        [522] => 8
        [523] => 15
        [524] => 9
        [525] => 12
        [526] => 7
        [527] => 12
        [528] => 10
        [529] => 9
        [530] => 10
        [531] => 11
        [532] => 9
        [533] => 7
        [534] => 14
        [535] => 9
        [536] => 9
        [537] => 9
        [538] => 7
        [539] => 12
        [540] => 14
        [541] => 18
        [542] => 13
        [543] => 6
        [544] => 12
        [545] => 5
        [546] => 14
        [547] => 15
        [548] => 7
        [549] => 8
        [550] => 11
        [551] => 7
        [552] => 11
        [553] => 14
        [554] => 11
        [555] => 15
        [556] => 7
        [557] => 9
        [558] => 9
        [559] => 6
        [560] => 9
        [561] => 11
        [562] => 14
        [563] => 7
        [564] => 12
        [565] => 11
        [566] => 10
        [567] => 6
        [568] => 9
        [569] => 8
        [570] => 11
        [571] => 11
        [572] => 18
        [573] => 9
        [574] => 10
        [575] => 7
        [576] => 11
        [577] => 11
        [578] => 13
        [579] => 9
        [580] => 6
        [581] => 10
        [582] => 7
        [583] => 9
        [584] => 10
        [585] => 6
        [586] => 10
        [587] => 8
        [588] => 18
        [589] => 14
        [590] => 8
        [591] => 9
        [592] => 13
        [593] => 16
        [594] => 7
        [595] => 8
        [596] => 10
        [597] => 12
        [598] => 12
        [599] => 13
        [600] => 9
        [601] => 7
        [602] => 11
        [603] => 9
        [604] => 10
        [605] => 11
        [606] => 15
        [607] => 12
        [608] => 9
        [609] => 13
        [610] => 9
        [611] => 6
        [612] => 9
        [613] => 11
        [614] => 11
        [615] => 5
        [616] => 15
        [617] => 11
        [618] => 9
        [619] => 9
        [620] => 12
        [621] => 13
        [622] => 9
        [623] => 9
        [624] => 9
        [625] => 10
        [626] => 6
        [627] => 8
        [628] => 12
        [629] => 12
        [630] => 11
        [631] => 9
        [632] => 10
        [633] => 12
        [634] => 13
        [635] => 15
        [636] => 4
        [637] => 15
        [638] => 8
        [639] => 9
        [640] => 10
        [641] => 9
        [642] => 14
        [643] => 12
        [644] => 13
        [645] => 12
        [646] => 5
        [647] => 9
        [648] => 9
        [649] => 7
        [650] => 7
        [651] => 16
        [652] => 12
        [653] => 17
        [654] => 6
        [655] => 6
        [656] => 14
        [657] => 9
        [658] => 8
        [659] => 7
        [660] => 12
        [661] => 12
        [662] => 11
        [663] => 4
        [664] => 11
        [665] => 15
        [666] => 20
        [667] => 10
        [668] => 14
        [669] => 10
        [670] => 7
        [671] => 10
        [672] => 6
        [673] => 12
        [674] => 10
        [675] => 11
        [676] => 6
        [677] => 10
        [678] => 7
        [679] => 8
        [680] => 13
        [681] => 13
        [682] => 11
        [683] => 16
        [684] => 14
        [685] => 11
        [686] => 16
        [687] => 13
        [688] => 4
        [689] => 9
        [690] => 11
        [691] => 14
        [692] => 14
        [693] => 8
        [694] => 9
        [695] => 13
        [696] => 9
        [697] => 2
        [698] => 14
        [699] => 16
        [700] => 11
        [701] => 7
        [702] => 10
        [703] => 11
        [704] => 10
        [705] => 13
        [706] => 10
        [707] => 10
        [708] => 13
        [709] => 7
        [710] => 17
        [711] => 7
        [712] => 9
        [713] => 10
        [714] => 10
        [715] => 12
        [716] => 12
        [717] => 10
        [718] => 15
        [719] => 9
        [720] => 7
        [721] => 11
        [722] => 8
        [723] => 7
        [724] => 8
        [725] => 12
        [726] => 9
        [727] => 9
        [728] => 12
        [729] => 9
        [730] => 15
        [731] => 11
        [732] => 5
        [733] => 3
        [734] => 11
        [735] => 12
        [736] => 20
        [737] => 3
        [738] => 7
        [739] => 9
        [740] => 12
        [741] => 10
        [742] => 10
        [743] => 6
        [744] => 10
        [745] => 7
        [746] => 10
        [747] => 11
        [748] => 7
        [749] => 13
        [750] => 13
        [751] => 11
        [752] => 13
        [753] => 14
        [754] => 12
        [755] => 8
        [756] => 13
        [757] => 10
        [758] => 6
        [759] => 11
        [760] => 10
        [761] => 13
        [762] => 8
        [763] => 12
        [764] => 9
        [765] => 8
        [766] => 7
        [767] => 8
        [768] => 13
        [769] => 12
        [770] => 10
        [771] => 15
        [772] => 7
        [773] => 10
        [774] => 9
        [775] => 15
        [776] => 11
        [777] => 6
        [778] => 8
        [779] => 7
        [780] => 11
        [781] => 9
        [782] => 9
        [783] => 7
        [784] => 13
        [785] => 12
        [786] => 15
        [787] => 9
        [788] => 6
        [789] => 16
        [790] => 8
        [791] => 8
        [792] => 16
        [793] => 11
        [794] => 10
        [795] => 11
        [796] => 10
        [797] => 8
        [798] => 11
        [799] => 8
        [800] => 11
        [801] => 4
        [802] => 11
        [803] => 15
        [804] => 13
        [805] => 9
        [806] => 14
        [807] => 10
        [808] => 10
        [809] => 7
        [810] => 8
        [811] => 8
        [812] => 8
        [813] => 14
        [814] => 6
        [815] => 6
        [816] => 11
        [817] => 9
        [818] => 8
        [819] => 7
        [820] => 7
        [821] => 8
        [822] => 2
        [823] => 5
        [824] => 15
        [825] => 4
        [826] => 12
        [827] => 11
        [828] => 8
        [829] => 6
        [830] => 5
        [831] => 9
        [832] => 13
        [833] => 12
        [834] => 11
        [835] => 6
        [836] => 14
        [837] => 9
        [838] => 12
        [839] => 6
        [840] => 4
        [841] => 11
        [842] => 7
        [843] => 9
        [844] => 9
        [845] => 7
        [846] => 7
        [847] => 18
        [848] => 11
        [849] => 8
        [850] => 12
        [851] => 6
        [852] => 14
        [853] => 12
        [854] => 9
        [855] => 13
        [856] => 12
        [857] => 7
        [858] => 9
        [859] => 12
        [860] => 9
        [861] => 8
        [862] => 5
        [863] => 13
        [864] => 11
        [865] => 8
        [866] => 8
        [867] => 7
        [868] => 10
        [869] => 13
        [870] => 11
        [871] => 9
        [872] => 10
        [873] => 8
        [874] => 10
        [875] => 16
        [876] => 10
        [877] => 12
        [878] => 14
        [879] => 4
        [880] => 9
        [881] => 10
        [882] => 10
        [883] => 17
        [884] => 13
        [885] => 6
        [886] => 8
        [887] => 12
        [888] => 14
        [889] => 9
        [890] => 12
        [891] => 6
        [892] => 7
        [893] => 16
        [894] => 8
        [895] => 14
        [896] => 11
        [897] => 20
        [898] => 7
        [899] => 11
        [900] => 10
        [901] => 8
        [902] => 9
        [903] => 13
        [904] => 9
        [905] => 12
        [906] => 14
        [907] => 8
        [908] => 10
        [909] => 13
        [910] => 10
        [911] => 5
        [912] => 7
        [913] => 8
        [914] => 12
        [915] => 10
        [916] => 17
        [917] => 9
        [918] => 8
        [919] => 6
        [920] => 8
        [921] => 12
        [922] => 9
        [923] => 10
        [924] => 5
        [925] => 11
        [926] => 13
        [927] => 9
        [928] => 11
        [929] => 8
        [930] => 9
        [931] => 9
        [932] => 7
        [933] => 10
        [934] => 13
        [935] => 15
        [936] => 12
        [937] => 10
        [938] => 12
        [939] => 10
        [940] => 11
        [941] => 6
        [942] => 8
        [943] => 5
        [944] => 17
        [945] => 9
        [946] => 12
        [947] => 9
        [948] => 14
        [949] => 11
        [950] => 10
        [951] => 13
        [952] => 10
        [953] => 10
        [954] => 10
        [955] => 6
        [956] => 8
        [957] => 18
        [958] => 8
        [959] => 6
        [960] => 13
        [961] => 10
        [962] => 12
        [963] => 11
        [964] => 14
        [965] => 10
        [966] => 8
        [967] => 9
        [968] => 14
        [969] => 17
        [970] => 11
        [971] => 7
        [972] => 11
        [973] => 15
        [974] => 11
        [975] => 11
        [976] => 16
        [977] => 7
        [978] => 12
        [979] => 7
        [980] => 10
        [981] => 8
        [982] => 9
        [983] => 6
        [984] => 11
        [985] => 13
        [986] => 10
        [987] => 11
        [988] => 9
        [989] => 7
        [990] => 12
        [991] => 7
        [992] => 7
        [993] => 11
        [994] => 8
        [995] => 13
        [996] => 12
        [997] => 9
        [998] => 16
        [999] => 13
    )
    
  2. xqus commented on Nov 3, 2014

    @xqus
    Contributor

    Is this generated with OpenSSL available on the system?

  3. multiwebinc commented on Nov 3, 2014

    @multiwebinc
    Author

    Yes it is:

    $ php -i | grep -i openssl
    SSL Version => OpenSSL/1.0.1f
    openssl
    OpenSSL support => enabled
    OpenSSL Library Version => OpenSSL 1.0.1f 6 Jan 2014
    OpenSSL Header Version => OpenSSL 1.0.1f 6 Jan 2014
    OpenSSL support => enabled
    
  4. self-assigned this
    on Dec 21, 2014
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions