我正在尝试创建一个创建密码的java程序,无论是所有小写、小写和大写、小写和大写和数字、小写和大写以及数字和标点符号,该程序还必须创建用户选择的密码之一,并且必须根据用户选择的内容生成密码长度。我已经生成了密码选项供用户选择,并提示他选择一个。我现在被困在如何创建上面提到的密码类型上。一个人建议我使用ASCII值,然后将它们转换为文本。我知道如何将它们转换为文本,但它会显示数字、字母和标点符号。有没有什么方法可以只为小写字母生成ASCII值?此外,我将如何根据用户给出的长度生成密码?
以防万一对某人有用。基于ASCII范围的标准Java 8类的单行随机密码生成器:
String password = new Random().ints(10, 33, 122).collect(StringBuilder::new,
StringBuilder::appendCodePoint, StringBuilder::append)
.toString();
或
String password = new Random().ints(10, 33, 122).mapToObj(i -> String.valueOf((char)i)).collect(Collectors.joining());
这里的密码长度是10。当然,您也可以在一定范围内随机设置它。字符来自ASCII范围33-122,均为特殊符号、数字大写和小写。
如果您需要小写字母,只需设置范围:97-122
您可以使用组织。阿帕奇。平民lang.RandomStringUtils生成随机文本/密码。例如,请参考此链接。
我使用这个不可变的类
它使用生成器模式
它不支持扩展。
public final class PasswordGenerator {
private static final String LOWER = "abcdefghijklmnopqrstuvwxyz";
private static final String UPPER = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private static final String DIGITS = "0123456789";
private static final String PUNCTUATION = "!@#$%&*()_+-=[]|,./?><";
private boolean useLower;
private boolean useUpper;
private boolean useDigits;
private boolean usePunctuation;
private PasswordGenerator() {
throw new UnsupportedOperationException("Empty constructor is not supported.");
}
private PasswordGenerator(PasswordGeneratorBuilder builder) {
this.useLower = builder.useLower;
this.useUpper = builder.useUpper;
this.useDigits = builder.useDigits;
this.usePunctuation = builder.usePunctuation;
}
public static class PasswordGeneratorBuilder {
private boolean useLower;
private boolean useUpper;
private boolean useDigits;
private boolean usePunctuation;
public PasswordGeneratorBuilder() {
this.useLower = false;
this.useUpper = false;
this.useDigits = false;
this.usePunctuation = false;
}
/**
* Set true in case you would like to include lower characters
* (abc...xyz). Default false.
*
* @param useLower true in case you would like to include lower
* characters (abc...xyz). Default false.
* @return the builder for chaining.
*/
public PasswordGeneratorBuilder useLower(boolean useLower) {
this.useLower = useLower;
return this;
}
/**
* Set true in case you would like to include upper characters
* (ABC...XYZ). Default false.
*
* @param useUpper true in case you would like to include upper
* characters (ABC...XYZ). Default false.
* @return the builder for chaining.
*/
public PasswordGeneratorBuilder useUpper(boolean useUpper) {
this.useUpper = useUpper;
return this;
}
/**
* Set true in case you would like to include digit characters (123..).
* Default false.
*
* @param useDigits true in case you would like to include digit
* characters (123..). Default false.
* @return the builder for chaining.
*/
public PasswordGeneratorBuilder useDigits(boolean useDigits) {
this.useDigits = useDigits;
return this;
}
/**
* Set true in case you would like to include punctuation characters
* (!@#..). Default false.
*
* @param usePunctuation true in case you would like to include
* punctuation characters (!@#..). Default false.
* @return the builder for chaining.
*/
public PasswordGeneratorBuilder usePunctuation(boolean usePunctuation) {
this.usePunctuation = usePunctuation;
return this;
}
/**
* Get an object to use.
*
* @return the {@link gr.idrymavmela.business.lib.PasswordGenerator}
* object.
*/
public PasswordGenerator build() {
return new PasswordGenerator(this);
}
}
/**
* This method will generate a password depending the use* properties you
* define. It will use the categories with a probability. It is not sure
* that all of the defined categories will be used.
*
* @param length the length of the password you would like to generate.
* @return a password that uses the categories you define when constructing
* the object with a probability.
*/
public String generate(int length) {
// Argument Validation.
if (length <= 0) {
return "";
}
// Variables.
StringBuilder password = new StringBuilder(length);
Random random = new Random(System.nanoTime());
// Collect the categories to use.
List<String> charCategories = new ArrayList<>(4);
if (useLower) {
charCategories.add(LOWER);
}
if (useUpper) {
charCategories.add(UPPER);
}
if (useDigits) {
charCategories.add(DIGITS);
}
if (usePunctuation) {
charCategories.add(PUNCTUATION);
}
// Build the password.
for (int i = 0; i < length; i++) {
String charCategory = charCategories.get(random.nextInt(charCategories.size()));
int position = random.nextInt(charCategory.length());
password.append(charCategory.charAt(position));
}
return new String(password);
}
}
这是一个用法示例,
PasswordGenerator passwordGenerator = new PasswordGenerator.PasswordGeneratorBuilder()
.useDigits(true)
.useLower(true)
.useUpper(true)
.build();
String password = passwordGenerator.generate(8); // output ex.: lrU12fmM 75iwI90o
<?php $pw='simplewind'; $afpw=sp_password($pw);//加密字符串 echo $afpw;//输出加密后的字符串 ?>
本文向大家介绍Python生成随机密码,包括了Python生成随机密码的使用技巧和注意事项,需要的朋友参考一下 本人 python新手,使用的环境是python2.7,勿喷 以上就是本文的全部内容了,希望对大家学习python能够有所帮助。
我正在使用。NET Bcrypt哈希实现来自第三方库,它具有创建哈希的方法,只需提供文本或密码,如下所示。 我知道生成的hash包含salt信息,但在创建hash时它没有获取salt参数。 Bcrypt在内部创建随机盐并使用它? 如果我不使用salt重载方法,它会导致安全漏洞吗?
我正在尝试用Java编写一个简单的密码管理器。我想用AES 256位加密用存储的密码加密文件。此外,我希望用户能够解密的文件与密码。当阅读其他在线帖子时,他们几乎都强调简单地使用密码作为密钥是不安全的,他们提到使用随机盐来增加安全性。但我不明白如何在生成密钥时使用随机盐。如果我从用户的密码和随机的salt创建密钥,那么当他们试图解密他们的文件时,我怎么知道salt是什么呢?这让我完全糊涂了。 目前
注: 内容来自官网资料 Java Generated Code 这个页面准确描述 protocol buffer 编译器为任何给定协议定义生成的java代码。proto2和proto3生成的代码之间的任何不同都将被高亮 - 注意在这份文档中描述的是这些生成代码的不同,而不是基本的消息类/接口,后者在两个版本中是相同的。在阅读这份文档之前你应该先阅读 proto2语言指南 和/或 proto3语言指
我刚刚开始一个编码训练营,对于我们的第三个作业,我们必须编写一个带有一些用户偏好的随机密码生成器。我写了我的代码,除了一位之外,一切都可以工作。当用户只选择数值时,会出现错误,我的字符选择池告诉我“pSelection.charAt不是GeneratePWD的函数”。 考虑到该函数在其他任何情况下都能完美工作,这对我来说毫无意义。我尝试为失败的特定(else-if)语句创建一个单独的数组。我尝试过