要求:密碼必須包含數字和字母
思路:1.列出數字和字符。 組成字符串 :chars
2.利用randrom.Next(int i)返回一個小於所指定最大值的非負隨機數。
3. 隨機取不小於chars長度的隨機數a,取字符串chars的第a位字符。
4.循環 8次,得到8位密碼
5.循環N次,批量得到密碼。
代碼實現如下 Main函數:
static void Main(string[] args)
{
string chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
Random randrom = new Random((int)DateTime.Now.Ticks);
string path1 = @"C:\Users\lenovo\Desktop\pws.txt";
for (int j = 0; j < 10000;j++ )
{
string str = "";
for (int i = 0; i < 8; i++)
{
str += chars[randrom.Next(chars.Length)];//randrom.Next(int i)返回一個小於所指定最大值的非負隨機數
}
if (IsNumber(str))//判斷是否全是數字
continue;
if (IsLetter(str))//判斷是否全是字母
continue;
File.AppendAllText(path1, str);
string pws = Md5(str,32);//MD5加密
File.AppendAllText(path1, "," + pws + "\r\n");
}
Console.WriteLine("ok");
Console.Read();
}
巧用String.trim 函數,判斷是否全是數字,全是字母。
說明:string.trim 從 String 對象移除前導空白字符和尾隨空白字符。
返回:一個字符串副本,其中從該字符串的開頭和末尾移除了所有空白字符。
有一個重載:string.Trim(params char[] trimChars)
//從當前System.string對象移除數組中指定的一組字符的所有前導匹配項和尾部匹配項
trimChars:要刪除的字符數組
方法實現如下代碼:
//判斷是否全是數字
static bool IsNumber(string str)
{
if (str.Trim("0123456789".ToCharArray()) == "")
return true;
return false;
}
//判斷是否全是字母
static bool IsLetter(string str)
{
if (str.Trim("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".ToCharArray()) == "")
return true;
return false;
}
用MD5加密,算法代碼實現如下:
/// <summary>
/// MD5加密
/// </summary>
/// <param name="str">加密字元</param>
/// <param name="code">加密位數16/32</param>
/// <returns></returns>
public static string Md5(string str, int code)
{
string strEncrypt = string.Empty;
MD5 md5 = new MD5CryptoServiceProvider();
byte[] fromData = Encoding.GetEncoding("GB2312").GetBytes(str);
byte[] targetData = md5.ComputeHash(fromData);
for (int i = 0; i < targetData.Length; i++)
{
strEncrypt += targetData[i].ToString("X2");
}
if (code == 16)
{
strEncrypt = strEncrypt.Substring(8, 16);
}
return strEncrypt;
}
生成批量密碼,和加密後的密碼如下圖:
