2014-01-30 105 views
1

我有一個密碼生成器在我的腳本中生成2個密碼並將它們寫入數據庫。讓我的密碼生成器生成'複雜'的密碼

這些密碼稍後會被檢索並設置爲2個用戶的Windows登錄密碼,這些密碼是在虛擬機中自動創建的。

我有一個問題,就Windows而言,我的密碼並不總是被認爲是複雜的。

我使用下面的函數來生成我的密碼...

Public Function GeneratePassword(ByVal len As Integer) As String 
    Dim str As String = "1234567890qwertyuio1pa2sd3fg4hj5kl6zx7cv8bn9mQ0WE1RT2YU3IO4PA5SD6FG7HJ8KL9ZX0CVBNM" 
    Dim N As Integer = str.Length 
    Dim rnd As New Random((Now.Hour * 3600 + Now.Minute * 60 + 
    Now.Second) * 1000 + Now.Millisecond) 
    Dim sb As New StringBuilder 
    For l As Integer = 1 To len 
    sb.Append(str.Substring(rnd.Next(0, N), 1)) 
    Next 
    Return sb.ToString 
    End Function 

然後被稱爲像這樣...

Dim vm_password1 As String = GeneratePassword(10) 

我將如何去最好的有關修改這個代碼確保生成的每個密碼包含1個大寫字符,1個小寫字符和一個數字?

任何幫助表示讚賞! :)

+0

拆分您的字符串分爲多個字符串。一個用於大寫字母,另一個用於數字等。然後確保您在輸入密碼時至少得到一個字符串中的一個項目 – 5uperdan

+1

請勿在安全相關事宜中使用Random類(請參閱我的其他[註釋](http://stackoverflow.com/questions/21454915/make-my-password-generator-generate-complex-passwords#comment32390472_21455648))。 – SilverlightFox

回答

0

當然,你可以在此進一步延伸,但這裏的JIST

Public Function fnGenPw() As String 

    Dim RandomClass As New Random() 
    Const legalAlpha As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" 
    Const legalNums As String = "1234567890" 

    Dim strbNewpw As New StringBuilder 

    For i As Integer = 0 To 2 'first 3 characters are alpha 
     Dim RandomNumber As Integer = RandomClass.Next(legalAlpha.Length - 1) 
     strbNewpw.Append(legalAlpha.Chars(RandomNumber)) 
    Next 
    For i As Integer = 3 To 5 'characters 4,5,6 are numeric 
     Dim RandomNumber As Integer = RandomClass.Next(legalNums.Length - 1) 
     strbNewpw.Append(legalNums.Chars(RandomNumber)) 
    Next 
    For i As Integer = 6 To 9 'characters 7,8,9,10 are alpha 
     Dim RandomNumber As Integer = RandomClass.Next(legalAlpha.Length - 1) 
     strbNewpw.Append(legalAlpha.Chars(RandomNumber)) 
    Next 

    Return strbNewpw.ToString 
End Function 
+1

它應該使用[RNGCryptoServiceProvider](http://msdn.microsoft.com/en-us/library/system.security.cryptography.rngcryptoserviceprovider(v = vs.110).aspx),否則生成的值是可預測的,因此不安全的。 – SilverlightFox

+0

由於創建的用戶帳戶具有'用戶必須在第一次登錄時更改密碼'設置,所以它在此階段確實沒有那麼大的問題,所以這個生成的密碼只是一個將通過安全票發送給客戶的密碼他們最初登錄到Windows之後,他們被迫選擇自己的複雜密碼。 :) – John