在javascript中生成安全密码

cho*_*ovy 5 javascript passwords

在javascript中生成安全密码的最快方法是什么?

我希望它包含至少1个特殊字符和2个混合大小写.必须至少6个字符.

Ble*_*der 33

以下是一些有用的String功能:

String.prototype.pick = function(min, max) {
    var n, chars = '';

    if (typeof max === 'undefined') {
        n = min;
    } else {
        n = min + Math.floor(Math.random() * (max - min + 1));
    }

    for (var i = 0; i < n; i++) {
        chars += this.charAt(Math.floor(Math.random() * this.length));
    }

    return chars;
};


// Credit to @Christoph: http://stackoverflow.com/a/962890/464744
String.prototype.shuffle = function() {
    var array = this.split('');
    var tmp, current, top = array.length;

    if (top) while (--top) {
        current = Math.floor(Math.random() * (top + 1));
        tmp = array[current];
        array[current] = array[top];
        array[top] = tmp;
    }

    return array.join('');
};
Run Code Online (Sandbox Code Playgroud)

您的密码如下所示:

var specials = '!@#$%^&*()_+{}:"<>?\|[];\',./`~';
var lowercase = 'abcdefghijklmnopqrstuvwxyz';
var uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var numbers = '0123456789';

var all = specials + lowercase + uppercase + numbers;

var password = '';
password += specials.pick(1);
password += lowercase.pick(1);
password += uppercase.pick(1);
password += all.pick(3, 10);
password = password.shuffle();
Run Code Online (Sandbox Code Playgroud)

演示:http://jsfiddle.net/Blender/ERCsD/6/

  • Math.random() 不是一个安全的随机源。这个答案是假的。 (2认同)

小智 5

我现在才得到这个职位。如果您可以花几分钟时间看这篇文章,那么使用Math.random()是一个坏主意。

实际上,较新的浏览器中已有加密API,一旦开始使用加密技术,就必须立即使用它。

这就是为什么我建议使用使用著名加密API的My library的原因。它可以在服务器端和客户端(nodejs和浏览器)上工作。

mk-

  • 关于透明度,提及这是您自己的工作将是一个好主意。 (10认同)