パスワード生成でよく使われる Math.random() は、実は内部的にアルゴリズムで計算された「疑似乱数」で、理論上は予測できてしまいます。パスワードのような安全性が重要な場面では、これでは不十分です。
このツールでは代わりに Web Crypto API の crypto.getRandomValues() を使っています。これは OS レベルのエントロピー(ノイズ)を元に生成される乱数で、暗号用途にも使える予測不可能な値が得られます。
実際の生成ロジックはシンプルです。選択された文字種(大文字・小文字・数字・記号)を一列に並べた「文字セット」を作り、乱数値を n % 文字セットの長さ で割った余りをインデックスとして文字を取り出す、という処理を指定の文字数分繰り返します。
文字数や文字種の設定は localStorage に保存されるため、次回開いたときも同じ設定が復元されます。