zoukankan      html  css  js  c++  java
  • 用CSharp生成强密码

      在很多场景下,我们需要一个强密码来保证可访问的数据或系统。如何检查你的密码安全级别,可以到Microsoft Online Safety – Using strong password这个网站。代码并不复杂,看下面片段代码:

       1:          /// <summary>
       2:          /// create another string which is a concatenation of all above
       3:          /// </summary>
       4:          private string allChars = alphaCaps + alphaLow + numerics + special;
       5:          /// <summary>
       6:          /// create constant strings for each type of characters
       7:          /// </summary>
       8:          private static readonly string alphaCaps = "QWERTYUIOPASDFGHJKLZXCVBNM";
       9:          private static readonly string alphaLow = "qwertyuiopasdfghjklzxcvbnm";
      10:          private static readonly string numerics = "1234567890";
      11:          private Random random = new Random();
      12:          private static readonly string special = "@#$";
      13:   
      14:          #endregion Fields 
      15:   
      16:          #region Methods (3) 
      17:   
      18:          // Public Methods (1) 
      19:   
      20:          /// <summary>
      21:          /// Generates the strong password.
      22:          /// </summary>
      23:          /// <remarks>
      24:          /// Generate four repeating random numbers are postions of lower, upper, numeric and special characters
      25:          /// By filling these positions with corresponding characters,we can ensure the password has atleast one character of those types
      26:          /// </remarks>
      27:          /// <param name="length">The length.</param>
      28:          /// <returns>password  string</returns>
      29:          public string GenerateStrongPassword(int length)
      30:          {
      31:              StringBuilder generatedPassword = new StringBuilder(length);
      32:   
      33:              if (length < 4)
      34:                  throw new Exception("Number of characters should be greater than 4.");
      35:   
      36:              int pLower, pUpper, pNumber, pSpecial;
      37:              string posArray = "0123456789";
      38:              if (length < posArray.Length)
      39:                  posArray = posArray.Substring(0, length);
      40:              pLower = GetRandomPosition(ref posArray);
      41:              pUpper = GetRandomPosition(ref posArray);
      42:              pNumber = GetRandomPosition(ref posArray);
      43:              pSpecial = GetRandomPosition(ref posArray);
      44:   
      45:              for (int i = 0; i < length; i++)
      46:              {
      47:                  if (i == pLower)
      48:                      generatedPassword.Append(GetRandomChar(alphaCaps));
      49:                  else if (i == pUpper)
      50:                      generatedPassword.Append(GetRandomChar(alphaLow));
      51:                  else if (i == pNumber)
      52:                       generatedPassword.Append(GetRandomChar(numerics));
      53:                  else if (i == pSpecial)
      54:                       generatedPassword.Append(GetRandomChar(special));
      55:                  else
      56:                      generatedPassword.Append(GetRandomChar(allChars));
      57:              }
      58:              return generatedPassword.ToString();
      59:          }
      60:          // Private Methods (2) 
      61:   
      62:          /// <summary>
      63:          /// Gets the random char.
      64:          /// </summary>
      65:          /// <param name="fullString">The full string.</param>
      66:          /// <returns></returns>
      67:          private string GetRandomChar(string fullString)
      68:          {
      69:              return fullString.ToCharArray()[(int)Math.Floor(random.NextDouble() * fullString.Length)].ToString();
      70:          }
      71:   
      72:          /// <summary>
      73:          /// Gets the random position.
      74:          /// </summary>
      75:          /// <param name="posArray">The pos array.</param>
      76:          /// <returns></returns>
      77:          private int GetRandomPosition(ref string posArray)
      78:          {
      79:              string randomChar = posArray.ToCharArray()[(int) Math.Floor(random.NextDouble()
      80:                                                                          *posArray.Length)].ToString();
      81:              int pos = int.Parse(randomChar);
      82:              posArray = posArray.Replace(randomChar, "");
      83:              return pos;
      84:          }

    例如我们用上面的CODE生成一个长度为8位密码是: ASSu#zO3,你可以写一个UI去显示它们了。

    希望对您有帮助。

    Author: Petter Liu   http://wintersun.cnblogs.com

  • 相关阅读:
    在python中添加自定义模块
    jquery图片延时加载
    java的内部类与匿名类
    Oracle数据库优化器的优化方式
    JS实现画线(兼容所有浏览器)
    Ext中window的用法
    关于工作流WEB设计器的一些问题
    ORACLE EBS 价目表的导入功能存储过程BUG
    EXT编程实现人员信息的添加
    用户交互式垃圾回收机制
  • 原文地址:https://www.cnblogs.com/wintersun/p/1705501.html
Copyright © 2011-2022 走看看