asp.net 生成随机密码的具体代码

代码如下:

public static class RandomPassword
   {
       // Define default min and max password lengths.
       private static int DEFAULT_MIN_PASSWORD_LENGTH = 8;
       private static int DEFAULT_MAX_PASSWORD_LENGTH = 10;

// Define supported password characters divided into groups.
       private static string PASSWORD_CHARS_LCASE = "abcdefgijkmnopqrstwxyz";
       private static string PASSWORD_CHARS_UCASE = "ABCDEFGHJKLMNPQRSTWXYZ";
       private static string PASSWORD_CHARS_NUMERIC = "23456789";
       private static string PASSWORD_CHARS_SPECIAL = "*$-+?_&=!%{}/";

/// <summary>
       /// Generates a random password.
       /// </summary>
       /// <returns>
       /// Randomly generated password.
       /// </returns>
       /// <remarks>
       /// The length of the generated password will be determined at
       /// random. It will be no shorter than the minimum default and
       /// no longer than maximum default.
       /// </remarks>
       public static string Generate()
       {
           return Generate(DEFAULT_MIN_PASSWORD_LENGTH,
                           DEFAULT_MAX_PASSWORD_LENGTH);
       }

/// <summary>
       /// Generates a random password of the exact length.
       /// </summary>
       /// <param name="length">
       /// Exact password length.
       /// </param>
       /// <returns>
       /// Randomly generated password.
       /// </returns>
       public static string Generate(int length)
       {
           return Generate(length, length);
       }

/// <summary>
       /// Generates a random password.
       /// </summary>
       /// <param name="minLength">
       /// Minimum password length.
       /// </param>
       /// <param name="maxLength">
       /// Maximum password length.
       /// </param>
       /// <returns>
       /// Randomly generated password.
       /// </returns>
       /// <remarks>
       /// The length of the generated password will be determined at
       /// random and it will fall with the range determined by the
       /// function parameters.
       /// </remarks>
       public static string Generate(int minLength,
                                     int maxLength)
       {
           // Make sure that input parameters are valid.
           if (minLength <= 0 || maxLength <= 0 || minLength > maxLength)
               return null;

// Create a local array containing supported password characters
           // grouped by types. You can remove character groups from this
           // array, but doing so will weaken the password strength.
           char[][] charGroups = new char[][]
       {
           PASSWORD_CHARS_LCASE.ToCharArray(),
           PASSWORD_CHARS_UCASE.ToCharArray(),
           PASSWORD_CHARS_NUMERIC.ToCharArray(),
           PASSWORD_CHARS_SPECIAL.ToCharArray()
       };

// Use this array to track the number of unused characters in each
           // character group.
           int[] charsLeftInGroup = new int[charGroups.Length];

// Initially, all characters in each group are not used.
           for (int i = 0; i < charsLeftInGroup.Length; i++)
               charsLeftInGroup[i] = charGroups[i].Length;

// Use this array to track (iterate through) unused character groups.
           int[] leftGroupsOrder = new int[charGroups.Length];

// Initially, all character groups are not used.
           for (int i = 0; i < leftGroupsOrder.Length; i++)
               leftGroupsOrder[i] = i;

// Because we cannot use the default randomizer, which is based on the
           // current time (it will produce the same "random" number within a
           // second), we will use a random number generator to seed the
           // randomizer.

// Use a 4-byte array to fill it with random bytes and convert it then
           // to an integer value.
           byte[] randomBytes = new byte[4];

// Generate 4 random bytes.
           RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
           rng.GetBytes(randomBytes);

// Convert 4 bytes into a 32-bit integer value.
           int seed = (randomBytes[0] & 0x7f) << 24 |
                       randomBytes[1] << 16 |
                       randomBytes[2] << 8 |
                       randomBytes[3];

Random random = new Random(seed);
           char[] password = null;

// Allocate appropriate memory for the password.
           if (minLength < maxLength)
               password = new char[random.Next(minLength, maxLength + 1)];
           else
               password = new char[minLength];

// Index of the next character to be added to password.
           int nextCharIdx;

// Index of the next character group to be processed.
           int nextGroupIdx;

// Index which will be used to track not processed character groups.
           int nextLeftGroupsOrderIdx;

// Index of the last non-processed character in a group.
           int lastCharIdx;

// Index of the last non-processed group.
           int lastLeftGroupsOrderIdx = leftGroupsOrder.Length - 1;

// Generate password characters one at a time.
           for (int i = 0; i < password.Length; i++)
           {
               // If only one character group remained unprocessed, process it;
               // otherwise, pick a random character group from the unprocessed
               // group list. To allow a special character to appear in the
               // first position, increment the second parameter of the Next
               // function call by one, i.e. lastLeftGroupsOrderIdx + 1.
               if (lastLeftGroupsOrderIdx == 0)
                   nextLeftGroupsOrderIdx = 0;
               else
                   nextLeftGroupsOrderIdx = random.Next(0,
                                                        lastLeftGroupsOrderIdx);

// Get the actual index of the character group, from which we will
               // pick the next character.
               nextGroupIdx = leftGroupsOrder[nextLeftGroupsOrderIdx];

// Get the index of the last unprocessed characters in this group.
               lastCharIdx = charsLeftInGroup[nextGroupIdx] - 1;

// If only one unprocessed character is left, pick it; otherwise,
               // get a random character from the unused character list.
               if (lastCharIdx == 0)
                   nextCharIdx = 0;
               else
                   nextCharIdx = random.Next(0, lastCharIdx + 1);

// Add this character to the password.
               password[i] = charGroups[nextGroupIdx][nextCharIdx];

// If we processed the last character in this group, start over.
               if (lastCharIdx == 0)
                   charsLeftInGroup[nextGroupIdx] =
                                             charGroups[nextGroupIdx].Length;
               // There are more unprocessed characters left.
               else
               {
                   // Swap processed character with the last unprocessed character
                   // so that we don't pick it until we process all characters in
                   // this group.
                   if (lastCharIdx != nextCharIdx)
                   {
                       char temp = charGroups[nextGroupIdx][lastCharIdx];
                       charGroups[nextGroupIdx][lastCharIdx] =
                                   charGroups[nextGroupIdx][nextCharIdx];
                       charGroups[nextGroupIdx][nextCharIdx] = temp;
                   }
                   // Decrement the number of unprocessed characters in
                   // this group.
                   charsLeftInGroup[nextGroupIdx]--;
               }

// If we processed the last group, start all over.
               if (lastLeftGroupsOrderIdx == 0)
                   lastLeftGroupsOrderIdx = leftGroupsOrder.Length - 1;
               // There are more unprocessed groups left.
               else
               {
                   // Swap processed group with the last unprocessed group
                   // so that we don't pick it until we process all groups.
                   if (lastLeftGroupsOrderIdx != nextLeftGroupsOrderIdx)
                   {
                       int temp = leftGroupsOrder[lastLeftGroupsOrderIdx];
                       leftGroupsOrder[lastLeftGroupsOrderIdx] =
                                   leftGroupsOrder[nextLeftGroupsOrderIdx];
                       leftGroupsOrder[nextLeftGroupsOrderIdx] = temp;
                   }
                   // Decrement the number of unprocessed groups.
                   lastLeftGroupsOrderIdx--;
               }
           }

// Convert password characters into a string and return the result.
           return new string(password);
       }
   }

(0)

相关推荐

  • asp.net利用cookie保存用户密码实现自动登录的方法

    本文实例讲述了asp.net利用cookie保存用户密码实现自动登录的方法.分享给大家供大家参考.具体分析如下: 在asp.net中可以用cookie保存用户的帐户密码实现自动登录的功能,但是需要强调一下,cookie在客户端保存,是不安全的,推荐使用md5加密保存. 下面分析一下在asp.net中cookie的创建.提取与销毁的方法: 创建cookie 复制代码 代码如下: //向客户端写入Cookie HttpCookie hcUserName1 = new HttpCookie("unam

  • ASP.net中md5加密码的方法

    <%@ Page Language="C#" ContentType="text/html"%>  <%@ Import Namespace="System"%>  <script language="C#" runat="server">  void Page_Load(Object sender,EventArgs e){  //获取要加密的字段,并转化为Byte[]

  • ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter

    •可限制最大输入字符长度 •可设置字符截取速度 •可自定义提示信息文本样式(可以改进自定义文本内容) 该插件统计英文字符和中文的长度是一样的. 废话少说,这里直接奉上详细插件代码,具体实现细节已经在代码里面有注释: 复制代码 代码如下: ; (function ($) { $.fn.extend({ textAreaCount: function (options) { var $textArea = this; options = $.extend({ maxlength: 140, // 定

  • ASP.NET 回发密码框清空问题处理方法

    在Page_Load里面加上 复制代码 代码如下: this.txtPassword.Attributes["value"] = this.txtPassword.Text;

  • 解读ASP.NET密码强度验证代码实例分享

    效果如下: 输入密码:密码强度: 弱 中 强 代码如下: 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&qu

  • ASP.NET MVC5网站开发之添加\删除\重置密码\修改密码\列表浏览管理员篇2(六)

    一.安装插件. 展示层前端框架以Bootstrap为主,因为Bootstrap的js功能较弱,这里添加一些插件作补充.其实很多js插件可以通过NuGet安装,只是NuGet安装时添加的内容较多,不如自己复制来的干净,所以这里所有的插件都是下载然后复制到项目中. 1.Bootstrap 3 Datepicker 4.17.37 网址:https://eonasdan.github.io/bootstrap-datetimepicker/ 下载并解压压缩包->将bootstrap-datetimep

  • asp.net membership 密码重设

    在web.config中: 复制代码 代码如下: <connectionStrings> <add name="SqlServices" connectionString="server=.;database=data;uid=sa;pwd=123;" /> </connectionStrings> 复制代码 代码如下: <membership defaultProvider="SqlProvider"

  • ASP.NET MVC5网站开发用户修改资料和密码(六)

    在上一篇文章网站开发(五)中实现了用户的注销和登录,其实代码里落了点东西,就是用户登录要更新最后一次登录时间和登录IP,这次补上.今天做修改资料和修改密码,TryUpdateModel是新用到的东西. 现完善昨天的登录代码: 一.用户导航菜单 这个就是侧栏的导航,以后所有控制器中action名都为Menu.目标效果如下: 先UserController添加Menu action.直接返回分布视图.右键添加视图 <div class="panel panel-primary">

  • 浅析ASP.NET生成随机密码函数

    实现ASP.NET生成随机密码功能是很容易的,下面的代码给出了完整的实现方法: 复制代码 代码如下: publicstaticstringMakePassword(stringpwdchars,intpwdlen) { stringtmpstr=""; intiRandNum; Randomrnd=newRandom(); for(inti=0; i{ iRandNum=rnd.Next(pwdchars.Length); tmpstr+=pwdchars[iRandNum]; } r

  • ASp.net 文本框(TextBox)计算,判断输入的是否是数字

    复制代码 代码如下: protected void txtQty_TextChanged(object sender, EventArgs e) { checkForm(); } //检验文本信息是否合法,如果合法则开始计算 protected void checkForm() { try { if (!IsNumberic(txtQty.Text) && txtQty.Text != "") { checkbool = false; Response.Write(&q

  • ASP.NET文本框密码赋默认值的方法

    对于普通的文本输入框,可以使用下边的方法赋默认值: <asp:TextBox ID="TextBox1" runat="server">12345</asp:TextBox> 将输入框类型改为密码后,页面上密码框总是空白,默认值丢失: <asp:TextBox ID="TextBox1" runat="server" TextMode="Password">12345&l

  • asp.net中使用cookie与md5加密实现记住密码功能的实现代码

    在做一个前台的登陆和后台的信息审核管理功能时,需要用到记住密码的模块:虽然.net内置了登陆控件,有记住密码的功能,但还是想自己实践一下,以下代码主要应用了COOKIE,包括安全加密的过程等. 复制代码 代码如下: //设置,删除Cookie//provider jb51.net        protected void set_cookie()        {            HttpCookie UserNameCookie = Request.Cookies["UserNameC

随机推荐