【发布时间】:2015-11-09 10:13:11
【问题描述】:
我有兴趣生成具有以下属性的(安全)随机字符串:
- 至少 1 个大写字母
- 至少 1 个小写字母
- 0-9 中至少 1 位数字
- 字符 $&@ 中的至少一个特殊字符?~!%#
字符串长度应为 12-13 位/字符。
我知道 Apache commons 中有一个类可以帮助生成随机字符串,但是没有包含特殊字符的选项。
我也知道一些关于 SO 的其他类似问题,但没有一个完全满足这些要求。
到目前为止,我已经尝试了以下方法:
import java.security.SecureRandom;
public final class SessionIdentifierGenerator {
private SecureRandom random = new SecureRandom();
public String nextSessionId() {
return
new BigInteger(130, random).toString(32);
}
}
但它不包含来自 4 个点中的每一个的字符集。
我也试过了:
static final String AB = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
static Random rnd = new Random();
String randomString( int len )
{
StringBuilder sb = new StringBuilder( len );
for(int i = 0; i < len; i++)
sb.append(AB.charAt( rnd.nextInt(AB.length())));
return sb.toString();
}
我知道我可以修改字符串 AB 以包含特殊字符,但无法保证字符串将包含至少 1 个大写字母、1 个小写字母、1 个数字和 1 个特殊字符。
我正在使用 Java。
【问题讨论】:
-
欢迎来到 Stack Overflow。如果您发布您尝试过的示例并直接提出问题,而不是“什么是最好的方法?”等过于宽泛的问题,您会更快地找到帮助和答案。
-
研究 Apache 代码,看看如何修改它“以包含特殊字符”。
-
@andrewdleach 发布了一些示例..
-
或者你可以使用correct horse battery staple。 ;)
-
我还在等..谢谢
标签: java string random passwords