[英].NET C# Reset Password - Random!
我已經完成了通常的谷歌搜索,我認為我說在.NET Framework中沒有隨機密碼生成器是正確的。 意圖是為忘記用戶重置AD中的密碼。
這在滲透測試的下一階段肯定是一個問題。 我想避免回答“哦,是的,我只是敲了我自己的發電機東西”。
有什么建議? 當然,我不能依賴.NET Random類和一個字符數組。
干杯。
雖然你不應該依靠Random
的東西,涉及到安全,你應該用罰款RNGCryptoServiceProvider
生成需要建設新的密碼隨機數據。
此外,還有實際上是在BCL用於產生隨機密碼的方法,但其隱藏在System.Web
組件。 靜態方法Membership.GeneratePassword
可以生成調用者指定的密碼長度。
GeneratePassword方法用於生成隨機密碼,並且最常由成員資格提供程序實施的ResetPassword方法用於將用戶的密碼重置為新的臨時密碼。
生成的密碼僅包含字母數字字符和以下標點符號:!@#$%^&*()_- + = [{]};:<> | ./?。 生成的密碼中不包含隱藏或不可打印的控制字符。
該文檔似乎不包含有關如何創建密碼的任何信息,但源代碼可供您查看。
如果您真的想要真正的隨機性,那么您應該使用RNGCryptoServiceProvider類而不是Random來執行此類任務。 這是一個如何在.NET中創建隨機密碼的示例。
這是一個生成簡單記憶密碼的功能。 可能對重置密碼或創建初始密碼很有用,而不是要求用戶在注冊期間鍵入密碼。
// Creates fairly easy-to-remember random passwords, consisting of
// three syllables (consonnant + vowel) and two digits at the end.
// A total of 172'800'000 combinations is possible.
public static string GeneratePassword()
{
const string consonnants = "bcdfghjklmnpqrstvwxz";
const string vowels = "aeiouy";
string password = "";
byte[] bytes = new byte[4];
var rnd = new RNGCryptoServiceProvider();
for (int i=0; i<3; i++)
{
rnd.GetNonZeroBytes(bytes);
password += consonnants[bytes[0]*bytes[1] % consonnants.Length];
password += vowels [bytes[2]*bytes[3] % vowels.Length];
}
rnd.GetBytes(bytes);
password += (bytes[0] % 10).ToString() + (bytes[1] % 10).ToString();
return password;
}
這會產生如下密碼:
bavara11
baqovi84
namana07
cyluha55
vobana18
qanabi05
bukinu09
gapupa29
PS那些可能不是世界上最安全的密碼,但我敢說,這些密碼比人們在互聯網上使用的平均值要強得多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.