如何在Javascript中生成32位的随机令牌?

时间:2016-05-22 18:47:15

标签: javascript

我需要在JavaScript中生成一个准确的32位随机字母数字字符串。
有没有直接的功能呢?

4 个答案:

答案 0 :(得分:4)

使用cryptotyped array;

function random32bit() {
    let u = new Uint32Array(1);
    window.crypto.getRandomValues(u);
    let str = u[0].toString(16).toUpperCase();
    return '00000000'.slice(str.length) + str;
}

这为我们提供了一个32位加密随机数,表示为8个字符串(基数为16)的零填充字符串

如果你想将它扩展到任意数量的字符;

function randomHash(nChar) {
    let nBytes = Math.ceil(nChar = (+nChar || 8) / 2);
    let u = new Uint8Array(nBytes);
    window.crypto.getRandomValues(u);
    let zpad = str => '00'.slice(str.length) + str;
    let a = Array.prototype.map.call(u, x => zpad(x.toString(16)));
    let str = a.join('').toUpperCase();
    if (nChar % 2) str = str.slice(1);
    return str;
}

在ES5中,附有评论

function randomHash(nChar) {
    // convert number of characters to number of bytes
    var nBytes = Math.ceil(nChar = (+nChar || 8) / 2);

    // create a typed array of that many bytes
    var u = new Uint8Array(nBytes);

    // populate it wit crypto-random values
    window.crypto.getRandomValues(u);

    // convert it to an Array of Strings (e.g. "01", "AF", ..)
    var zpad = function (str) {
        return '00'.slice(str.length) + str
    };
    var a = Array.prototype.map.call(u, function (x) {
        return zpad(x.toString(16))
    });

    // Array of String to String
    var str = a.join('').toUpperCase();
    // and snip off the excess digit if we want an odd number
    if (nChar % 2) str = str.slice(1);

    // return what we made
    return str;
}

答案 1 :(得分:2)

  

我需要生成一个准确的32位随机字母数字字符串   的JavaScript。

如果您指的是32个字符,则可以使用URL.createObjectURLString.prototype.slice()String.prototype.replace()

var rand = URL.createObjectURL(new Blob([])).slice(-36).replace(/-/g, "")

答案 2 :(得分:1)

您可以使用此功能:

function returnHash(){
    abc = "abcdefghijklmnopqrstuvwxyz1234567890".split("");
    var token=""; 
    for(i=0;i<32;i++){
         token += abc[Math.floor(Math.random()*abc.length)];
    }
    return token; //Will return a 32 bit "hash"
}

通过致电returnHash()

来使用

答案 3 :(得分:0)

Paul S.'s answer的启发,但简单一些:

const Token = () => {
  const array = new Uint32Array(1)
  window.crypto.getRandomValues(array)
  return array[0].toString(36)
}