
あるプロジェクトでは、クライアントで強力なパスワードを生成する必要がありました。 既製のソリューションを探しましたが、適切なものは見つかりませんでした。
見つかったすべてのライブラリは、いくつかの理由で適合しませんでした-単に希望の長さでパスワードを生成したため、パスワードの強度を確認する方法がありませんでした。 独自の「自転車」を書くことが決定されました-代替ソリューションとして、経験は不要ではありません。 結果はPassGenJSライブラリです。
ボンネットの下にあるもの:
- 依存関係なし
- 指定されたパラメーター(文字、数字、文字などの数)に応じたパスワード生成
- 信頼性値によるパスワード生成(1-弱い、4-高い信頼性)
- 信頼性%によるパスワード生成(0〜100%)
- エントロピー計算によるパスワード強度の検証
いくつか例を挙げます。
強力なパスワードを生成します:
PassGenJS.getPassword({score: 3}); // - 8!G$}6&={a(_>
非常に簡単なパスワードを生成します:
PassGenJS.getPassword({score: 1}); // - 82oN
60%の信頼性でパスワードを生成します。
PassGenJS.getPassword({reliabilityPercent: 60}); // - YyopjU5atXBMG
文字パラメーターを使用してパスワードを生成します。
PassGenJS.getPassword({ symbols: 2, // . letters: 2, // numbers: 1, // lettersUpper: 5 // }); // - m6A:k=WYPP
パスワードの強度を確認することもできます。
PassGenJS.getScore("YyopjU5atXBMG"); // : { "password": "YyopjU5atXBMG", // "score": 3, // (4 - ) "entropy": 77, // "reliability": 60.15625, // ( ) "reliabilityPercent": 60 // % }
このプラグインで使用される推定アルゴリズムは、情報理論の一般原則に基づいています。
パスワードの強度の推定として、そのエントロピーの値が使用されます。 詳細については、 ウィキペディアをご覧ください 。
パスワードのエントロピー (情報容量)は、情報理論の方法によって推定された、パスワードを構成する一連の文字を選択する際のランダム性の尺度を意味します。 パスワードのエントロピーを決定するために使用される式は次のとおりです。

Nは使用可能な文字数、Lはパスワードの文字数です。 Hはビット単位で測定されます。
プラグインの一部として、次の条件を使用して、エントロピーによってパスワードの強度を決定します。
- N < 56-弱い(1)
- 56 <= N <64-中(2)
- 64 <= N < 128-信頼性(3)
- N> 128-高信頼性(4)
if (entropy > 0 && entropy < 56) { score = 1; } else if (entropy >= 56 && entropy < 64) { score = 2; } else if (entropy >= 64 && entropy < 128) { score = 3; } else if (entropy >= 128) { score = 4; }
私は健全な批判とフィードバックに喜んでいるでしょう。 誰かが便利なプラグインを見つけたら、さらに開発することができます:
- jqueryプラグイン
- パスワードの長さの制限
- 特定のキャラクターの除外
- 任意の文字の追加(パラメーターの受け渡しを介して)
- など