स्वीकृत उत्तर के लिए कुछ पूरक कोड जोड़े गए। यह केवल रैंडम का उपयोग करके उत्तरों पर सुधार करता है और कुछ पासवर्ड विकल्पों की अनुमति देता है। मुझे KeePass उत्तर के कुछ विकल्प भी पसंद आए लेकिन मैं अपने समाधान में निष्पादन योग्य को शामिल नहीं करना चाहता था।
private string RandomPassword(int length, bool includeCharacters, bool includeNumbers, bool includeUppercase, bool includeNonAlphaNumericCharacters, bool includeLookAlikes)
{
if (length < 8 || length > 128) throw new ArgumentOutOfRangeException("length");
if (!includeCharacters && !includeNumbers && !includeNonAlphaNumericCharacters) throw new ArgumentException("RandomPassword-Key arguments all false, no values would be returned");
string pw = "";
do
{
pw += System.Web.Security.Membership.GeneratePassword(128, 25);
pw = RemoveCharacters(pw, includeCharacters, includeNumbers, includeUppercase, includeNonAlphaNumericCharacters, includeLookAlikes);
} while (pw.Length < length);
return pw.Substring(0, length);
}
private string RemoveCharacters(string passwordString, bool includeCharacters, bool includeNumbers, bool includeUppercase, bool includeNonAlphaNumericCharacters, bool includeLookAlikes)
{
if (!includeCharacters)
{
var remove = new string[] { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };
foreach (string r in remove)
{
passwordString = passwordString.Replace(r, string.Empty);
passwordString = passwordString.Replace(r.ToUpper(), string.Empty);
}
}
if (!includeNumbers)
{
var remove = new string[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
foreach (string r in remove)
passwordString = passwordString.Replace(r, string.Empty);
}
if (!includeUppercase)
passwordString = passwordString.ToLower();
if (!includeNonAlphaNumericCharacters)
{
var remove = new string[] { "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "-", "_", "+", "=", "{", "}", "[", "]", "|", "\\", ":", ";", "<", ">", "/", "?", "." };
foreach (string r in remove)
passwordString = passwordString.Replace(r, string.Empty);
}
if (!includeLookAlikes)
{
var remove = new string[] { "(", ")", "0", "O", "o", "1", "i", "I", "l", "|", "!", ":", ";" };
foreach (string r in remove)
passwordString = passwordString.Replace(r, string.Empty);
}
return passwordString;
}
यह पहला लिंक था जब मैंने यादृच्छिक पासवर्ड बनाने के लिए खोज की थी और निम्नलिखित वर्तमान प्रश्न के लिए गुंजाइश से बाहर है, लेकिन विचार करना महत्वपूर्ण हो सकता है।
System.Web.Security.Membership.GeneratePassword
गैर-अल्फ़ान्यूमेरिक होने वाले वर्णों के न्यूनतम 20% के साथ गुप्त रूप से सुरक्षित होने की धारणा के आधार पर ।
- यह सुनिश्चित नहीं है कि यदि पात्रों को हटाने और तार जोड़ने को इस मामले में अच्छा अभ्यास माना जाता है और पर्याप्त एन्ट्रापी प्रदान करता है।
- स्मृति में सुरक्षित पासवर्ड भंडारण के लिए सिक्योरस्ट्रिंग के साथ किसी तरह से लागू करने पर विचार करना चाह सकते हैं ।