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