您的位置:首页 >> 编程开发 >> .NET >> C# >> 正文
RSS
 

.NET中产生随机密码字符串

http://www.rdxx.com 04年06月01日 12:12 网络 我要投稿

关键词: 字符串 , 随机 , 密码 , .NET , 字符
using System;using System.Security.Cryptography;using System.Text;namespace Utility { public class PasswordGenerator { public PasswordGenerator() { this.Minimum = DefaultMinimum; this.Maximum = DefaultMaximum; this.ConsecutiveCharacters = false; this.RepeatCharacters = true; this.ExcludeSymbols = false; this.Exclusions = null; rng = new RNGCryptoServiceProvider(); } protected int GetCryptographicRandomNumber(int lBound, int uBound) { // 假定 lBound >= 0 && lBound < uBound // 返回一个 int >= lBound and < uBound uint urndnum; byte[] rndnum = new Byte[4]; if (lBound == uBound-1) { // 只有iBound返回的情况 return lBound; } uint xcludeRndBase = (uint.MaxValue - (uint.MaxValue%(uint)(uBound-lBound))); do { rng.GetBytes(rndnum); urndnum = System.BitConverter.ToUInt32(rndnum,0); } while (urndnum >= xcludeRndBase); return (int)(urndnum % (uBound-lBound)) + lBound; } protected char GetRandomCharacter() { int upperBound = pwdCharArray.GetUpperBound(0); if ( true == this.ExcludeSymbols ) { upperBound = PasswordGenerator.UBoundDigit; } int randomCharPosition = GetCryptographicRandomNumber(pwdCharArray.GetLowerBound(0), upperBound); char randomChar = pwdCharArray[randomCharPosition]; return randomChar; } public string Generate() { // 得到minimum 和 maximum 之间随机的长度 int pwdLength = GetCryptographicRandomNumber(this.Minimum, this.Maximum); StringBuilder pwdBuffer = new StringBuilder(); pwdBuffer.Capacity = this.Maximum; // 产生随机字符 char lastCharacter, nextCharacter; // 初始化标记 lastCharacter = nextCharacter = '\n'; for ( int i = 0; i < pwdLength; i++ ) { nextCharacter = GetRandomCharacter(); if ( false == this.ConsecutiveCharacters ) { while ( lastCharacter == nextCharacter ) { nextCharacter = GetRandomCharacter(); } } if ( false == this.RepeatCharacters ) { string temp = pwdBuffer.ToString(); int duplicateIndex = temp.IndexOf(nextCharacter); while ( -1 != duplicateIndex ) { nextCharacter = GetRandomCharacter(); duplicateIndex = temp.IndexOf(nextCharacter); } } if ( ( null != this.Exclusions ) ) { while ( -1 != this.Exclusions.IndexOf(nextCharacter) ) { nextCharacter = GetRandomCharacter(); } } pwdBuffer.Append(nextCharacter); lastCharacter = nextCharacter; } if ( null != pwdBuffer ) { return pwdBuffer.ToString(); } else { return String.Empty; } } public bool ConsecutiveCharacters { get { return this.hasConsecutive; } set { this.hasConsecutive = value;} } public bool ExcludeSymbols { get { return this.hasSymbols; } set { this.hasSymbols = value;} } public string Exclusions { get { return this.exclusionSet; } set { this.exclusionSet = value; } } public int Maximum { get { return this.maxSize; } set { this.maxSize = value; if ( this.minSize >= this.maxSize ) { this.maxSize = PasswordGenerator.DefaultMaximum; } } } public int Minimum { get { return this.minSize; } set { this.minSize = value; if ( PasswordGenerator.DefaultMinimum > this.minSize ) { this.minSize = PasswordGenerator.DefaultMinimum; } } } public bool RepeatCha
9 7 3 1 2 4 8 :

 
 
标签: 字符串 , 随机 , 密码 , .NET , 字符 打印本文
 
 
  热点搜索
 
 
 



Valid XHTML 1.0 Transitional
Copyright ©2005 - 2008 Rdxx.Com,All Rights Reserved
收藏本页
收藏本站