/ / .NET C # Resetuj hasło - losowo! - c #, .net

.NET C # Resetuj hasło - losowo! - c #, .net

Zrobiłem zwykłe wyszukiwania w Google i myślę, że mam rację mówiąc, że nie ma generatora losowych haseł w .NET Framework. Intencją jest zresetowanie haseł w AD dla zapominalskich użytkowników.

To z pewnością będzie problemem na kolejnym etapie testowania penetracji. Chcę uniknąć odpowiedzi "o tak, właśnie zapukałem swoją własną sprawę generatora".

Jakie są rekomendacje? Z pewnością nie mogę polegać na klasie .NET Random i tablicy znaków.

Twoje zdrowie.

Odpowiedzi:

13 dla odpowiedzi nr 1

Chociaż powinieneś nie polegać na Random dla wszystkiego, co dotyczy bezpieczeństwa, powinieneś być w porządku używając RNGCryptoServiceProvider generować losowe dane potrzebne do budowania nowych haseł.

W rzeczywistości jest metoda w BCL do generowania losowych haseł, ale ukryta w pliku System.Web montaż. Metoda statyczna Membership.GeneratePassword potrafi generować hasła o długości określonej przez wywołującego.

Metoda GeneratePassword służy do generowanialosowe hasło i jest najczęściej używane przez metodę ResetPassword zaimplementowaną przez dostawcę członkostwa, aby zresetować hasło użytkownika do nowego, tymczasowego hasła.

Wygenerowane hasło zawiera tylko alfanumeryczneznaki i następujące znaki interpunkcyjne:! @ # $% ^ & * () _- + = [{]};: <> | ./ ?. W generowanym haśle nie ma ukrytych lub niedrukowalnych znaków kontrolnych.

Dokumentacja nie zawiera żadnych informacji dotyczących w jaki sposób hasło jest tworzone, ale kod źródłowy jest dostępny żebyś rzucił okiem.


4 dla odpowiedzi nr 2

Jeśli naprawdę chcesz prawdziwej losowości, powinieneś użyć RNGCryptoServiceProvider klasa zamiast Losowy do takich zadań. Oto przykład jak stworzyć losowe hasło w .NET.


2 dla odpowiedzi nr 3

Jest to funkcja do generowania łatwych do zapamiętania haseł. Może być przydatna do resetowania hasła lub tworzenia początkowych haseł, zamiast proszenia użytkownika o wpisanie go podczas rejestracji.

    // 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;
}

Daje to hasła takie jak te:

bavara11
baqovi84
namana07
cyluha55
vobana18
qanabi05
bukinu09
gapupa29

P.S. To prawdopodobnie nie są najbezpieczniejsze hasła na świecie, ale I BET, są one znacznie silniejsze niż średnia z tego, co ludzie używają w Internecie.