这是在 JavaScript 中生成安全随机字符串的好方法吗?

Kir*_*met 5 javascript string random cryptography

下面是我编写的一些代码,用于在 JavaScript 中生成随机字符串。如果我使用从此方法收到的值作为用户的盐或令牌,是否会出现任何安全问题?

String.random = function(length, characters) {
    length = length === undefined ? 32 : length;
    characters = characters === undefined ? 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' : characters;

    var maxIndex = characters.length - 1;
    var string = '';

    for(var i = 0; i < length; i++) {
        string += characters[Number.random(0, maxIndex)];
    }

    return string;
}
Run Code Online (Sandbox Code Playgroud)

Max*_*Art 0

我认为这一切都归结为寻找一种在 Javascript 中生成随机数的替代方法,而不是依赖于Math.random.

一旦有了 的替代方案Math.random,您就可以以几乎相同的方式生成随机字符串。我建议看一下梅森扭曲算法。有相当多的 Javascript 实现(有些甚至在我链接的维基百科页面中)。

与许多随机数生成器一样,您必须从种子开始:您可以使用 生成一个种子Math.random,如果您愿意,还可以添加额外的“盐”。