如何在Java中创建一个符合系统长度和字符集要求的随机密码?
我必须创建一个长度为 10-14 个字符的随机密码,并且至少包含一个大写字母、一个小写字母和一个特殊字符。不幸的是,一些特殊字符太特殊而无法使用,所以我不能只使用打印的 ASCII。
该网站上的许多示例都会生成随机密码或会话密钥,字符中没有足够的熵,或者在业务环境中没有现实的要求(如上面给出的),因此我提出更尖锐的问题以获得更好的答案。
我的字符集,标准美国键盘上除空格外的每个特殊字符:
A-Z
a-z
0-9
~`!@#$%^&*()-_=+[{]}\|;:'",<.>/?
我建议使用 apache commons RandomStringUtils。使用已经做过的东西。
String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789~`!@#$%^&*()-_=+[{]}\\|;:\'\",<.>/?";
String pwd = RandomStringUtils.random( 15, characters );
System.out.println( pwd );
如果你使用的是maven
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
否则下载jar
UPDATE具有安全随机的版本。因此剩下的所需字符的问题可以像注释中那样解决,分别生成所需的部分和正常的部分。然后随机加入他们。
char[] possibleCharacters = (new String("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789~`!@#$%^&*()-_=+[{]}\\|;:\'\",<.>/?")).toCharArray();
String randomStr = RandomStringUtils.random( randomStrLength, 0, possibleCharacters.length-1, false, false, possibleCharacters, new SecureRandom() );
System.out.println( randomStr );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)