如何用 crypto.getRandomValues() 替换 Math.random() 并保持相同的结果?

k.v*_*ent 1 javascript random cryptography

我使用以下函数来获取特定的随机字符串,然后将其传递给另一个函数:

function generateRandomString() {
    return Math.random().toString(36).substring(2, 15) + 
           Math.random().toString(36).substring(2, 15);
}
Run Code Online (Sandbox Code Playgroud)

我想crypto.getRandomValues()Math.random(). 我将如何Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);作为参数传递给crypto.getRandomValues(),或者我的方向错误?

Lea*_*ner 5

你可以这样使用它:

function generateRandomString() {
     return (crypto.getRandomValues(new Uint32Array(1))[0] / 4294967295).toString(36).substring(2, 15) + (crypto.getRandomValues(new Uint32Array(1))[0] / 4294967295).toString(36).substring(2, 15);
}
Run Code Online (Sandbox Code Playgroud)

逻辑:将随机的 UInt32 除以最大值(2^32 -1),得到 0 到 1 之间的结果

这是参考: https: //developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues