我工作的一個隨機密碼生成器創建滿足一定的條件,包括密碼的條件,但不一定侷限於:隨機密碼生成與
- 最小長度:必須包含至少8個字符
- 小寫字母:必須包含小寫字母(從一組選擇,以避免具有字符的問題,可能被誤認爲是數字)
- 個大寫字母:必須包含大寫字母(同樣,從一組選定的)
- 位數:必須包含數字
什麼是最好的算法方法,以確保生成的密碼滿足所有這些?
我不是在尋找一個完整的解決方案,我只需要一些好的想法和指導方針。
我工作的一個隨機密碼生成器創建滿足一定的條件,包括密碼的條件,但不一定侷限於:隨機密碼生成與
什麼是最好的算法方法,以確保生成的密碼滿足所有這些?
我不是在尋找一個完整的解決方案,我只需要一些好的想法和指導方針。
1)隨機生成數字L,這將是您的密碼的確切長度。也就是說,生成的結果是它大於8
2)隨機生成一個數字LL,它將是小寫字母的數量。 LC必須在範圍[1..L-2]
3)隨機生成數字LU爲大寫。必須在範圍[1..L-LL-1]
4)LD = L-LL-LU大寫字母數
5)隨機生成LL小寫字母,LU大寫字母和LD數字並保持在列表(陣列)
6)洗牌陣列隨機
HTH
算法通常應在最初的幾個迭代成功,而不必實施爲您節省洗牌算法。
絕對!它也沒有隱藏的偏見。值得注意的是,這很快以高概率終止(在找到可接受的解決方案之前的預期嘗試次數是1.4)。愚蠢的是,我沒有注意到你寫的解決方案(同樣的解決方案,但我認爲隨機函數產生的隨機字節0x00-0xFF,並沒有打擾修復範圍)。 – 2011-03-19 22:34:52
有一個替代Armen提出的精確建築。
用一種懶惰的語言,這是大約6行非模板代碼,不需要任何洗牌。
編輯:是的,在評論中踩一個窗口,不要滑動窗口。謝謝!
滑動一個窗口或步入一個窗口?如果你滑動,你會偏向密碼的分佈,以最終支持較不頻繁的字符類。假設你想要2個字符的密碼。數字比字母少,所以典型的流看起來像'abcd5efg ...'。當你滑動窗口時,你拒絕'ab','bc','cd'並接受'd5'。這個數字更有可能出現在第二個位置,因爲只要它滑入該位置,密碼就可以接受。 – aaz 2011-03-19 17:34:42
對,你不應該真的滑動一個窗口,而是測試所需長度的離散塊:'loop input = let(s,r)= split如果strProp s是len,則輸入in,否則循環r。信封計算的後面說你應該測試1.4個可能的密碼來獲得一個有效密碼(對於8個字符,所以生成一個密碼平均消耗47個隨機字節)。 – 2011-03-19 19:44:25
http://www.texamples.com/how-to-generate-random-passwords-in-java/這可能有助於 – brainless 2012-09-12 16:13:58
不確定這是一個好主意。強加限制,比如「2+」數字,可能使得密碼不那麼「隨機」,而不是更隨機/更好。 – EML 2016-05-16 18:21:43