This code snippets will let you auto-generate strong passwords. Look for the password rules in the inline comments in code
001
using System;
002 using System.Collections.Generic;
003 using System.Linq;
004 using System.Security.Cryptography.X509Certificates;
005 using System.Text;
006 using System.Threading.Tasks;
007
008 namespace PwdGen
009 {
010 class Program
011 {
012 static void Main(string[] args)
013 {
014 //Console.WriteLine(GeneratePassword2(8, 15));
015 //Console.WriteLine(GeneratePassword(8, 15));
016 Console.ReadKey();
017 }
018
019 static string GeneratePassword2(int MinLength, int MaxLength)
020 {
021
022 string ValidChars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:;<>|=.,_-~!?&%@#$£€°^*§()+[] ";
023 string SpecialChars = "!@#$%^&*()";
024
025 string pwd = string.Empty;
026
027 do
028 {
029 Random rnd = new Random(Guid.NewGuid().GetHashCode());
030 pwd = string.Join(string.Empty, Enumerable.Repeat(ValidChars, rnd.Next(MinLength, MaxLength + 1)).Select(s => s[rnd.Next(s.Length)]).ToArray());
031 Console.WriteLine(pwd);
032 } while (
033
034 Regex.Match(pwd, "[a-zA-Z]{3,}").Success || // Not more than 3 chars in sequence
035 Regex.Match(pwd, @"(\w)\1{2,}").Success || //Same number should not repeat more than 2 times
036 Regex.Match(pwd, "[1-9]{3,}").Success || // Not more than 3 numbers in sequence
037 !Regex.Match(pwd, "[A-Z]").Success || // At least one upper case char
038 !Regex.Match(pwd, "[a-z]").Success || // At least one lower case char
039 !Regex.Match(pwd, "[1-9]").Success || // At least one number
040 (pwd.ToArray().Where(l => SpecialChars.ToArray().Any(l2 => l2 == l)).Count() == 0) // At least one pre defined special char
041 );
042
043 return pwd;
044 }
045
046 static string GeneratePassword(int MinLength, int MaxLength)
047 {
048 string ValidChars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:;<>|=.,_-~!?&%@#$£€°^*§()+[] ";
049 string SpecialChars = "!@#$%^&*()";
050
051 string pwd = string.Empty;
052
053 Random rnd = new Random(Guid.NewGuid().GetHashCode());
054
055 bool NumExist = false;
056 bool IsUpper = false;
057 bool IsLower = false;
058 bool IsSplChr = false;
059 bool NoRepeat = true;
060 bool NoSeq = true;
061
062 while ((!NumExist || !IsUpper || !IsLower || !IsSplChr) && (NoRepeat || NoSeq) )
063 {
064 NumExist = false;
065 IsUpper = false;
066 IsLower = false;
067 IsSplChr = false;
068 NoRepeat = true;
069 NoSeq = true;
070
071 pwd = string.Join(string.Empty, Enumerable.Repeat(ValidChars, rnd.Next(MinLength, MaxLength + 1)).Select(s => s[rnd.Next(s.Length)]).ToArray());
072 for (int i = 0; i < pwd.Length; i++)
073 {
074 // Contains at least 1 lower case letter and 1 upper case letter (all UTF-8), at least 1 number
075
076 if (!NumExist)
077 {
078 NumExist = (char.IsDigit(pwd[i]) && true);
079 }
080 if (!IsUpper)
081 {
082 IsUpper = (char.IsUpper(pwd[i]) && true);
083 }
084 if (!IsLower)
085 {
086 IsLower = (char.IsLower(pwd[i]) && true);
087 }
088
089 // A predefined set of special chars must be present
090 if (!IsSplChr)
091 {
092 IsSplChr = (SpecialChars.IndexOf(pwd[i]) >= 0);
093 }
094
095
096 // Not more than 2 identical characters in a row (e.g., 111 not allowed)
097 if (i < pwd.Length - 2 && NoRepeat)
098 {
099 NoRepeat = !((pwd[i] == pwd[i + 1]) && (pwd[i] == pwd[i + 2]));
100 }
101
102 // Not any sequence of the English alphabet / numbers (above 3 letters)
103 if (i < pwd.Length - 2 && NoSeq)
104 {
105 NoSeq = !((pwd[i + 2] - pwd[i + 1]) == (pwd[i + 1] - pwd[i]));
106 }
107 Console.WriteLine(!NumExist +" "+ !IsUpper + " " + !IsLower + " " + !IsSplChr + " " + NoRepeat +NoSeq);
108 }
109
110 }
111
112 return pwd;
113
114 }
115 }
116 }
117
View in GitHub | Made with wp-showgithubfile plugin
002 using System.Collections.Generic;
003 using System.Linq;
004 using System.Security.Cryptography.X509Certificates;
005 using System.Text;
006 using System.Threading.Tasks;
007
008 namespace PwdGen
009 {
010 class Program
011 {
012 static void Main(string[] args)
013 {
014 //Console.WriteLine(GeneratePassword2(8, 15));
015 //Console.WriteLine(GeneratePassword(8, 15));
016 Console.ReadKey();
017 }
018
019 static string GeneratePassword2(int MinLength, int MaxLength)
020 {
021
022 string ValidChars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:;<>|=.,_-~!?&%@#$£€°^*§()+[] ";
023 string SpecialChars = "!@#$%^&*()";
024
025 string pwd = string.Empty;
026
027 do
028 {
029 Random rnd = new Random(Guid.NewGuid().GetHashCode());
030 pwd = string.Join(string.Empty, Enumerable.Repeat(ValidChars, rnd.Next(MinLength, MaxLength + 1)).Select(s => s[rnd.Next(s.Length)]).ToArray());
031 Console.WriteLine(pwd);
032 } while (
033
034 Regex.Match(pwd, "[a-zA-Z]{3,}").Success || // Not more than 3 chars in sequence
035 Regex.Match(pwd, @"(\w)\1{2,}").Success || //Same number should not repeat more than 2 times
036 Regex.Match(pwd, "[1-9]{3,}").Success || // Not more than 3 numbers in sequence
037 !Regex.Match(pwd, "[A-Z]").Success || // At least one upper case char
038 !Regex.Match(pwd, "[a-z]").Success || // At least one lower case char
039 !Regex.Match(pwd, "[1-9]").Success || // At least one number
040 (pwd.ToArray().Where(l => SpecialChars.ToArray().Any(l2 => l2 == l)).Count() == 0) // At least one pre defined special char
041 );
042
043 return pwd;
044 }
045
046 static string GeneratePassword(int MinLength, int MaxLength)
047 {
048 string ValidChars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:;<>|=.,_-~!?&%@#$£€°^*§()+[] ";
049 string SpecialChars = "!@#$%^&*()";
050
051 string pwd = string.Empty;
052
053 Random rnd = new Random(Guid.NewGuid().GetHashCode());
054
055 bool NumExist = false;
056 bool IsUpper = false;
057 bool IsLower = false;
058 bool IsSplChr = false;
059 bool NoRepeat = true;
060 bool NoSeq = true;
061
062 while ((!NumExist || !IsUpper || !IsLower || !IsSplChr) && (NoRepeat || NoSeq) )
063 {
064 NumExist = false;
065 IsUpper = false;
066 IsLower = false;
067 IsSplChr = false;
068 NoRepeat = true;
069 NoSeq = true;
070
071 pwd = string.Join(string.Empty, Enumerable.Repeat(ValidChars, rnd.Next(MinLength, MaxLength + 1)).Select(s => s[rnd.Next(s.Length)]).ToArray());
072 for (int i = 0; i < pwd.Length; i++)
073 {
074 // Contains at least 1 lower case letter and 1 upper case letter (all UTF-8), at least 1 number
075
076 if (!NumExist)
077 {
078 NumExist = (char.IsDigit(pwd[i]) && true);
079 }
080 if (!IsUpper)
081 {
082 IsUpper = (char.IsUpper(pwd[i]) && true);
083 }
084 if (!IsLower)
085 {
086 IsLower = (char.IsLower(pwd[i]) && true);
087 }
088
089 // A predefined set of special chars must be present
090 if (!IsSplChr)
091 {
092 IsSplChr = (SpecialChars.IndexOf(pwd[i]) >= 0);
093 }
094
095
096 // Not more than 2 identical characters in a row (e.g., 111 not allowed)
097 if (i < pwd.Length - 2 && NoRepeat)
098 {
099 NoRepeat = !((pwd[i] == pwd[i + 1]) && (pwd[i] == pwd[i + 2]));
100 }
101
102 // Not any sequence of the English alphabet / numbers (above 3 letters)
103 if (i < pwd.Length - 2 && NoSeq)
104 {
105 NoSeq = !((pwd[i + 2] - pwd[i + 1]) == (pwd[i + 1] - pwd[i]));
106 }
107 Console.WriteLine(!NumExist +" "+ !IsUpper + " " + !IsLower + " " + !IsSplChr + " " + NoRepeat +NoSeq);
108 }
109
110 }
111
112 return pwd;
113
114 }
115 }
116 }
117