Комментарии 15
habr.com/ru/post/114483
Учитывая что там внутри xorshift — плохо что не дают явно выставить seed для контролируемой генерации. Из за этого генератор псевдослучайных чисел нужно писать руками, хотя он уже есть !?
Когда-то был того же мнения, но потом увидел реализацию подбора картинок по хэшам из руби (они в 1.9.4 кажется в патче без изменений номера поменяли агоритм)
В общем лучше пусть тем кому это надо, явно гуглят и юзает библиотеки. Так в случае чего хотя бы заменить проще...
П.С.: seedrandom.js
Из за этого генератор псевдослучайных чисел нужно писать руками, хотя он уже есть !?А я так и сделал, «портировал» широко известную хеш-функцию. Производительность по сравнению с нативной почти не изменилась.
const BJXorShift = (x) => {
x += x << 10;
x ^= x >> 6;
x += x << 3;
x ^= x >> 11;
x += x << 15;
return x;
}
let seed = (Math.random() * 0xffffffff) >>> 0;
const HM = 0x874C40D4 >>> 0;
...
seed = BJXorShift(seed ^ HM);
Стоит заметить, что раньше по Math.random() можно было определить, что зашел бот Гугла, т.к. выдавал определенную последовательность ПСЧ.
bl.ocks.org/mmalone/bf59aa2e44c44dde78ac
минутччччку, а где снежинки?
Подвис в поисках способа предсказать результаты Math.random()
после получения нескольких значений и нашёл. Проверял под Хромом. Только одно значение пропускает, а дальше вроде всё точно. Статья, из неё код на Питоне. В браузере в консоли вводим
_ = []; for(var i=0; i<5; ++i) { _.push(Math.random()) } ; console.log(_)
вставляем в строку 147, потом можно повторить генерацию случайных чисел на консоли и запустить питоновский скрипт, смотреть что выдаст. Мне, правда, долго выдавал ошибки про z3 и BitVecs но вот тут рабочее решение онлайн. Первый раз будет долго обновлять библиотеки, в том числе лишние. Без этого никак не запускалось.
Так что не используйте Math.random()
там, где важна непредсказуемость.
Подвис в поисках способа предсказать результаты Math.random()
после получения нескольких значений и нашёл. Проверял под Хромом. Только одно значение пропускает, а дальше вроде всё точно. Статья, из неё код на Питоне. В браузере в консоли вводим
_ = []; for(var i=0; i<5; ++i) { _.push(Math.random()) } ; console.log(_)
вставляем в строку 147, потом можно повторить генерацию случайных чисел на консоли и запустить питоновский скрипт, смотреть что выдаст. Мне, правда, долго выдавал ошибки про z3 и BitVecs но вот тут рабочее решение онлайн. Первый раз будет долго обновлять библиотеки, в том числе лишние. Без этого никак не запускалось.
Так что не используйте Math.random()
там, где важна непредсказуемость.
P.S. Интересно, похоже, в публичной версии другой порядок установки модулей и не работает. В общем, можно там же создать свой аккаунт, скопировать этот файл и подключить последовательно z3, z3-solver и mythril. Ну, или локально поднимать.
Способы использования Math.random() в JavaScript