গৃহীত উত্তরে কিছু পরিপূরক কোড যুক্ত হয়েছে। এটি কেবল র্যান্ডম ব্যবহার করে উত্তরের উপর উন্নতি করে এবং কিছু পাসওয়ার্ড বিকল্পের জন্য অনুমতি দেয়। আমি কেপাস উত্তর থেকে কিছু বিকল্প পছন্দ করেছিলাম কিন্তু আমার সমাধানে এক্সিকিউটেবলকে অন্তর্ভুক্ত করতে চাইনি।
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% অক্ষর অ-অক্ষরযুক্ত হয়।
- এই ক্ষেত্রে অক্ষরগুলি এবং সংযোজন স্ট্রিংগুলি ভাল অনুশীলন হিসাবে বিবেচনা করা হয় এবং পর্যাপ্ত এনট্রপি সরবরাহ করে কিনা তা নিশ্চিত নয়।
- মেমরিতে সুরক্ষিত পাসওয়ার্ড স্টোরেজের জন্য সিকিউরস্ট্রিংয়ের সাথে কোনও উপায়ে বাস্তবায়ন বিবেচনা করতে পারে ।