Подтвердить что ты не робот

Создайте случайный токен в Javascript на основе сведений о пользователе

Я хочу создать случайную строку (токен), которая может использоваться для идентификации пользователя, избегая любых возможных конфликтов с токенами других пользователей.

То, о чем я думал, было хешем MD5 navigator.userAgent + new Date().getTime(), чтобы сгенерировать токен, но для этого требуется вся Javascript MD5-библиотека для хеша, которую я действительно не хочу делать.

Он должен состоять из символов A-Z/0-9 и в идеале не более 32 символов. Я открыт для всех идей. Спасибо!

Просто для того, чтобы уточнить, что я не ищу генератор случайных строк, случайная строка должна быть сформирована из сведений о пользователе, доступных через Javascript, а также может использовать время, чтобы избежать потенциальных конфликтов!

4b9b3361

Ответ 1

Оформить заказ crypto.js. Его коллекция криптографических алгоритмов. Проект имеет отдельные js файлы для каждого алгоритма хэширования.

Ответ 2

Вы можете создать случайное число и преобразовать его в базу 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"

Ответ 3

Эта функция позволяет вам установить длину и допустимые символы маркера.

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"

Ответ 4

Вот как я генерирую случайные токены в JavaScript. Это в основном другая версия того, что Карим сделал в своем ответе .

/**
 * Returns a random length string of length n
 * See whitelist inside function for possible characters
 */
function generateToken(n) {

    // white list all possible characters
    var chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';

    // temp string to build a token
    var token = '';

    // loop: get random index from whitelist, append to temp string
    for(var i = 0; i < n; i++) {

        // random from 0 to length of whitelist
        var randomCharIndex = Math.floor(Math.random() * chars.length);

        // append a random character to the temp string
        token += chars[randomCharIndex];
    }

    // finally return the random token string
    return token;
}