Совместимость window.crypto.getRandomValues ()
Мне нужно создать криптографически безопасные псевдослучайные числа в Javascript. Я знаю об API window.crypto.getRandomValues
, который делает именно то, что я хочу. Тем не менее, я также знаю, что он был введен сравнительно недавно (в 2011 году или около того).
Можно ли с уверенностью предположить, что window.crypto.getRandomValues
присутствует, или будет ли он использовать проблемы совместимости в некоторых браузерах? Существуют ли крупные (широко используемые) браузеры, которые не поддерживают window.crypto.getRandomValues
(включая мобильные или настольные браузеры), и если да, то какие из них мне нужно беспокоиться? Я был бы рад узнать, что есть достаточная поддержка, что мне больше не нужно беспокоиться о методах резервного копирования, если это действительно так.
Ответы
Ответ 1
Можно ли с уверенностью предположить, что присутствует window.crypto.getRandomValues
Как всегда, это зависит от вашего целевого рынка и со временем изменится. caniuse.com перечисляет, какие браузеры поддерживают его, и вычисляет рынок браузеров.
Вот резюме:
- IE 11: w/prefix
-
IE Mobile 11: w/prefix
-
Firefox: 21 +
-
Firefox Mobile: 21 +
-
Safari: от 6.1
-
Safari Mobile: 7.1
-
Chrome: 11 +
- Chrome для мобильных телефонов: 23 +
-
Android-браузер: 4.4
-
Opera: 15 +
- Opera Mobile: 36 +
- Opera Mini: no
Ответ 2
Для более полного, обновленного представления, вероятно, лучше просто проверить caniuse.com
:
http://caniuse.com/#feat=getrandomvalues
По состоянию на декабрь 2015 года все современные браузеры, за исключением Opera Mini, поддерживают его:
![введите описание изображения здесь]()
Ответ 3
Привет, у меня была одна и та же проблема, я знаю, что это было какое-то время, но все же это может кому-то помочь. Opera является единственной, которая не поддерживает window.crypto.getRandomValues, но она math.random()
довольно безопасна.
То, что я сделал, чтобы решить это, было просто проверить, доступен ли window.crypto, если не проверить, является ли это обозревателем Opera, и если не пытаться выставить ошибку, говоря, что браузер не может создать безопасный пароль.
if(window.crypto && window.crypto.getRandomValues)
{
(use window.crypto.getRandomValues)
}
else if(isOpera)
{
(use Math.random)
}
else throw new Error("Your browser can not generate a secure Password, please change it to one that can (Google Chrome, IE, Firefox, Safari, Opera) or get the newest update.");
Надеюсь, это поможет кому-то.
Ответ 4
const crypto = window.crypto ||
window.msCrypto || {
getRandomValues: array => {
for (let i = 0, l = array.length; i < l; i++) {
array[i] = Math.floor(Math.random() * 256);
}
return array;
}
};
if (crypto.getRandomValues === undefined) {
throw new Error("crypto is not supported on this browser");
}