在JavaScript中实现new BigInteger(130, new SecureRandom()).toString(32)
Achieve new BigInteger(130, new SecureRandom()).toString(32) in JavaScript
我知道我们可以使用 window.crypto
来生成安全随机数,但是 window.crypto.getRandomValues()
正在使用 typedArray
。
我可以知道我们如何才能在 Java 脚本中实现这个 Java 函数:
new BigInteger(130, new SecureRandom()).toString(32)
您可以生成四个 32 位数字,总共 128 - 接近您的 Java 最大值 130(指定给 BigInteger
的构造函数的值是 最大位数,如docs)中所述,然后将它们全部转换为基数32,最后将它们连接在一起。
function getSecureRandom() {
// allocate space for four 32-bit numbers
const randoms = new Uint32Array(4);
// get random values
window.crypto.getRandomValues(randoms);
// convert each number to string in base 32, then join together
return Array.from(randoms).map(elem => elem.toString(32)).join("");
}
Array#from
调用是必需的,因为 TypedArray.prototype.map
returns 另一个 TypedArray
,并且类型化数组不能包含字符串。我们首先将类型化数组randoms
转换为普通数组,然后在其上调用.map()
。
我知道我们可以使用 window.crypto
来生成安全随机数,但是 window.crypto.getRandomValues()
正在使用 typedArray
。
我可以知道我们如何才能在 Java 脚本中实现这个 Java 函数:
new BigInteger(130, new SecureRandom()).toString(32)
您可以生成四个 32 位数字,总共 128 - 接近您的 Java 最大值 130(指定给 BigInteger
的构造函数的值是 最大位数,如docs)中所述,然后将它们全部转换为基数32,最后将它们连接在一起。
function getSecureRandom() {
// allocate space for four 32-bit numbers
const randoms = new Uint32Array(4);
// get random values
window.crypto.getRandomValues(randoms);
// convert each number to string in base 32, then join together
return Array.from(randoms).map(elem => elem.toString(32)).join("");
}
Array#from
调用是必需的,因为 TypedArray.prototype.map
returns 另一个 TypedArray
,并且类型化数组不能包含字符串。我们首先将类型化数组randoms
转换为普通数组,然后在其上调用.map()
。