【发布时间】:2020-02-29 16:18:03
【问题描述】:
我目前正在使用以下代码生成随机密码:
static public String randomPasswordGenerator(int n, String valid)
{
char[] pwd = new char[n];
Random rnd = new Random();
for (int i = 0; i < pwd.length; i++)
{
pwd[i] = valid.charAt(rnd.nextInt(valid.length()));
}
return new String(pwd);
}
有效参数当前设置为:
String valid = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ123456789#$&%£";
有时当我生成密码时,我发现生成了奇怪的字符,例如我可以得到:n9iB8Qj6inRÂ(其中最后一个字符不包含在有效集中)
知道为什么会这样吗?
非常感谢
编辑 我虽然这与编码问题有关,但在调试上述函数的返回字符串时,我可以直接看到那个奇怪的字符。 此外,使用字符集作为“#$&%£”有时可以返回所有字符以及那个奇怪的 A(例如:&%Â&$£%#Â&)
【问题讨论】:
-
以上代码至少没有明显的bug。可能是打印密码的时候出了问题?
-
£不是ASCII 符号。我只能假设它用多个代码点表示,并将其转换为char仅返回第一个代码点。但这只是在黑暗中刺伤。尝试输出随机索引并将其与密码中的错误字符进行比较。如果它与£的索引匹配,你就知道这可能是问题 -
尝试存储(随机)索引并在遇到错误密码时打印它们。这样您就可以将其追踪到特定的随机值。
-
@QBrute 使用
valid= "£" 和n= 1 运行 OP 的代码,按预期返回 "£"。我认为这不是错误的原因。 -
@mario_sunny 啊,我明白了。可能是因为
£包含在扩展ASCII 表中?
标签: java random passwords generator