我正在尝试生成一定长度的安全密码,以满足特定条件。
e.g。我想(比方说)一个10个字母的密码:
至少有1个大写字母
至少有1个小写字母
至少有一个号码
至少有1个下划线(或其他字符,但由于某些限制,只有下划线被接受,因此下划线很好)
我试过
SecureRandom.url_safeBase64(10)
但是这会生成太长的字符串,并不能保证每个限制都存在。
想知道是否有一种简单的方法......
答案 0 :(得分:5)
low = ('a'..'d').to_a
up = ('A'..'Z').to_a
num = ('0'..'9').to_a
u = ['_']
any = low + up + num + u
pw = (low.sample(1) +
up.sample(1) +
num.sample(1) +
u.sample(1) +
any.sample(6)).shuffle.join
答案 1 :(得分:1)
我从未听说过内置的开箱即用功能,但您可能会这样做:
samples = [('a'..'z'), ('A'..'Z'), (0..9), ['_']].map &:to_a
(samples.map(&:sample) + \ # ensure at least one of each group
(10-4).times.map do # 4 are already chosen
samples.flatten[rand(samples.flatten.size)] # pick random
end).shuffle.join