65.9K
CodeProject 正在变化。 阅读更多。
Home

带模式字符串支持的随机密码生成器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.04/5 (11投票s)

2005 年 10 月 4 日

CPOL

2分钟阅读

viewsIcon

64446

downloadIcon

835

一个基于 JavaScript 的随机密码生成器,支持模式字符串。

引言

最近,我的一个项目需要一个功能,即在系统中注册新用户时,必须自动生成该用户的密码。该需求还规定,密码生成过程应支持以下功能:

  • 密码的最小长度应该是可配置的。
  • 密码的最大长度应该是可配置的。
  • 大写/小写字母出现的数量应该是可配置的。
  • 密码应至少包含 x 个数字和/或符号。
  • 密码应该全部是大写或全部是小写或两者都有。

在经过一些谷歌搜索后,我找到了一个非常好的 密码生成器。不幸的是,这是用 PERL 编写的。由于我的项目是使用 MS 技术(VB/ASP)开发的,所以我需要一个使用这些技术的解决方案,这就是我最终创建这个 JavaScript 函数的原因。

脚本输入

该脚本接受以下四个输入参数

  1. 模式 - 这基本上定义了密码的字符组成。(默认值为 autogenerated。)
  2. MinLength - 密码的最小长度。(默认值为 8 个字符。)
  3. MaxLength - 密码的最大长度。(默认值为 15 个字符。)
  4. AllowDuplicate - 确定是否可以随后出现已经使用的字符。(默认值为 False。)

所有这些参数都是可选的。如果没有传递任何值,脚本将使用默认值。如果密码的最大长度大于模式字符串的长度,脚本会自动生成一个新的模式字符串。实际上,这种行为可以被更改为只生成 (maxlength - pattern.length) 个模式字符。

模式字符串

这个小脚本的核心是模式字符串。此字符串基本上包含以下内容

  • L - 表示在此位置需要一个小写英文字母。
  • U - 表示在此位置需要一个大写英文字母。
  • 9 - 表示在此位置需要一个 0-9 之间的数字。
  • S - 表示在此位置需要一个符号字符。

如果未指定模式字符串,脚本会自动生成一个。为此,我使用了 JavaScript 中可用的 Math.random 函数。genPattern 函数基本上生成一个 1-4 之间的随机数,并根据它决定使用哪个模式字符。这个过程会一直重复,直到达到密码的最大长度

function genPattern(pintLen)
{
    var strRet = "";
    var iCntr  = 0;
    var rndNo  = 0;

    for (iCntr = 0; iCntr < pintLen; iCntr++)
    {
        rndNo = Math.floor((4 - 1 + 1) * Math.random() + 1)
        switch (rndNo)
        {
            case 1:
                strRet += "9";
                break;
            case 2:
                strRet += "U";
                break;
            case 3:
                strRet += "S";
                break;
            case 4:
                strRet += "L";
                break;
        }
    }
    return strRet;
}

密码生成

实际的密码是通过为模式字符串中的每个模式字符调用 getRandomChar(strCharSet, strProcessed, blnAllowDup) 函数生成的,直到达到密码的最大长度。

结论

总的来说,这是一个非常简单的脚本,与 GeodSoft 的密码生成器相比,提供的选项/灵活性有限。但是它确实满足了正常的需求。我使用 GeodSoft 的 密码评估器 检查了生成的密码,发现此脚本生成的密码相当强大。

发布历史

  • 2005 年 10 月 4 日 - 首次发布。
  • 2006 年 1 月 28 日 - 修复了错误。(感谢 Mike 指出了这些错误。)
© . All rights reserved.