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

问题描述 投票:0回答:1

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

function generateRandomString() {
    return Math.random().toString(36).substring(2, 15) + 
           Math.random().toString(36).substring(2, 15);
}

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

javascript random cryptography
1个回答
2
投票

您可以这样使用它:

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);
}

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

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

© www.soinside.com 2019 - 2024. All rights reserved.