根据用户详细信息在Javascript中创建随机令牌

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据用户详细信息在Javascript中创建随机令牌相关的知识,希望对你有一定的参考价值。

我想创建一个随机字符串(令牌),可用于识别用户,同时避免与任何其他用户的令牌发生任何潜在冲突。

我想到的是生成令牌的navigator.userAgent + new Date().getTime()的MD5哈希,但是需要一个完整的javascript MD5库来哈希它,我真的不想这样做。

它必须由A-Z / 0-9字符组成,理想情况下不得超过32个字符。我对所有想法持开放态度。谢谢!

为了澄清我不是在寻找任何随机字符串生成器,随机字符串必须从通过Javascript提供的用户详细信息生成,并且还可以使用时间来避免潜在的冲突!

答案

结帐crypto.js项目。它是一系列加密算法。该项目为每个散列算法都有单独的js文件。

另一答案

您可以生成一个随机数并将其转换为基数36(0-9a-z):

var rand = function() {
    return Math.random().toString(36).substr(2); // remove `0.`
};

var token = function() {
    return rand() + rand(); // to make it longer
};

token(); // "bnh5yzdirjinqaorq0ox1tf383nb3xr"
另一答案

此功能允许您设置令牌长度和允许的字符。

function generate_token(length){
    //edit the token allowed characters
    var a = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".split("");
    var b = [];  
    for (var i=0; i<length; i++) {
        var j = (Math.random() * (a.length-1)).toFixed(0);
        b[i] = a[j];
    }
    return b.join("");
}

只需调用generate_token即可

generate_token(32); //returns "qweQj4giRJSdMNzB8g1XIa6t3YtRIHPH"
另一答案

我使用类似于Kareem's的方法,但使用较少的函数调用和内置数组操作来大幅提升性能。

根据performance test,这种方法也略微优于接受的答案。此外,它提供参数n以从可接受字符的白名单生成任何大小的令牌长度。它灵活且性能良好。

function generateToken(n) {
    var chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    var token = '';
    for(var i = 0; i < n; i++) {
        token += chars[Math.floor(Math.random() * chars.length)];
    }
    return token;
}
另一答案

这是不太可能的,但Math.random()可以返回0.0。在这种情况下,pimvdb的解决方案将返回""(空字符串)。所以,这是另一种解决方案,它在每种情况下都返回一个10个字符长度的随机base36:

function generateToken() {
    Math.floor(1000000000000000 + Math.random() * 9000000000000000)
          .toString(36).substr(0, 10)
}
另一答案

//length: defines the length of characters to express in the string

const rand=()=>Math.random(0).toString(36).substr(2);
const token=(length)=>(rand()+rand()+rand()+rand()).substr(0,length);

console.log(token(40));
//example1:  token(10) => result: tsywlmdqu6
//example2:  token(40) => result: m4vni14mtln2547gy54ksclhcv0dj6tp9fhs1k10

以上是关于根据用户详细信息在Javascript中创建随机令牌的主要内容,如果未能解决你的问题,请参考以下文章

如何在 liferay 6.2 CE 中创建一个 UserModelListener,它捕获仅​​在控制面板-> 用户组织中更新的用户详细信息的数据

如何在Javascript中创建随机字符串? [复制]

Kettle的多表级联

如何在 Python + Selenium 中创建随机用户代理?

如何生成 Azure O365 API 以获取我们使用 php 在 azure 门户上创建的用户详细信息

JavaScript 中创建三种消息框:警告框确认框提示框。