1

クライアント側の Web ページで Javascript を使用してパスワードを生成したいと考えています。パスワードには文字と数字、おそらくいくつかの記号を使用する必要があります。Javascript でパスワードを安全に生成するにはどうすればよいですか?

4

2 に答える 2

10

パスワードは予測不可能である必要があるため、適切にシードされた暗号 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/

于 2013-08-08T08:48:06.897 に答える
-1
 var random=Math.random().toString(36).substring(7);//this gives you 7 alpha numeric characters.
 var timestamp =new Date().getTime();//this gives you epoch time
 var my_very_unique_password=(random+timestamp);//concat both..
 alert(my_very_unique_password);

フィドルhttp://jsfiddle.net/bP57B/

そして、そのような巨大なパスワードが必要ない場合は、そうしてくださいalert(random)

于 2013-08-08T05:58:45.653 に答える