Javascript生成具有特定字母数量的随 secret 码

标签 javascript security random passwords

我想在客户端的网页中用 JavaScript 生成密码。密码应使用字母和数字,也许还有一些符号。如何在 Javascript 中安全地生成密码?

最佳答案

由于密码需要不可预测,因此它需要由种子良好的加密 PRNG 生成。 Math.random 通常不安全。

现代浏览器(至少当前版本的 Firefox 和 Chrome)支持生成安全随机值的 window.crypto.getRandomValues

基于 Presto 的 Opera 不支持它,但它的 Math.random 是安全的。但既然 Opera 已经死了,后备措施就不再需要了。

function randomString(length)
{
    var charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    var i;
    var result = "";
    var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';
    if(window.crypto && window.crypto.getRandomValues)
    {
        values = new Uint32Array(length);
        window.crypto.getRandomValues(values);
        for(i=0; i<length; i++)
        {
            result += charset[values[i] % charset.length];
        }
        return result;
    }
    else if(isOpera)//Opera's Math.random is secure, see http://lists.w3.org/Archives/Public/public-webcrypto/2013Jan/0063.html
    {
        for(i=0; i<length; i++)
        {
            result += charset[Math.floor(Math.random()*charset.length)];
        }
        return result;
    }
    else throw new Error("Your browser sucks and can't generate secure random numbers");
}

alert(randomString(10))

http://jsfiddle.net/ebbpa/

关于Javascript生成具有特定字母数量的随 secret 码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18118824/

相关文章:

python - 在 Python 中随机交错 2 个数组

javascript - javascript 中的 IndexOf 关联数组

javascript - jquery:切换一个div的 child

ruby-on-rails - Script Kiddie 尝试触发 Rails URI::InvalidURIError - 如何过滤?

security - 如何保持公钥静态,但轮换证书

c - 使用 fscanf 从文件读取时内存中的随机字符

javascript - JavaScript 中的 SVG 缩放

Javascript setTimeout 函数

database - Secure Database For Mac OS Xdevelopment(特别是核心数据)有哪些选项?

javascript - 唯一随机数生成器 Javascript