簡體   English   中英

.NET C#重置密碼 - 隨機!

[英].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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM