我有一个关于密码分析的练习(弱与强),我必须创建2个构造函数。其中一个必须收到密码的长度,密码必须随机创建,我该怎么做?
此外,我无法确定密码是弱还是强。如果密码至少有3个大写字母,2个小写字母和6个数字,那将会很强大。
class Password {
private double length;
private String password;
Password()//default constructor with password length 8
{
password="defaultt";
length=8;
}
Password(double length)
{
this.length=length;
password="";//generate a random password, how?
}
boolean isStrong(String password)
{
int totalnumbers=0;
int upper=0;
int lower=0;
for(int i=0;i<password.length;i++)//marks an error in .length why?
{
if (password.charAt(i)>='0' && password.charAt(i)<='9')
totalnumbers+=1;
if (password.charAt(i) is lowercase)//what can I do here?
lower+=1;
if (password.charAt(i) is uppercase)
upper+=1;
}
if(totalnumbers>=6 && lower>=2 && upper>=3)
return true;
else
return false;
}
generatePassword(double length)
{
password;//generate the password of the object with this.length //how to do it?
}
String getPassword()
{
return password;
}
double getLength()
{
return length;
}
void setLength(double length)
{
this.length=length;
}
}
public class Exercises2 {
public static void main(String[] args) {
Password x=new Password();
Password array[];
Scanner rd=new Scanner(System.in);
int Size;
System.out.println("Give the size of the passwords array ");
Size=rd.nextInt();
array=new Password[Size];
for( int i=0;i<Size;i++)
{
array[i]=new Password();//creation of an object for each position of the array
}
for(int j=0;j<Size;j++)
{
System.out.println("Give the size for each password of the array ");
array[j]=[rd.nextInt]; //length for each password of the array
}
Password arrayBooleans[]=new Password[Size];
for (int k=0;k<Size;k++){
arrayBooleans[k]=x.isStrong(array[k]);
}
for(int i=0;i<Size;i++)
{
System.out.println("password "+i+ arrayBooleans[i]);
}
}
}
答案 0 :(得分:2)
首先,您不应该使用Platform:
Buffalo WZR-1750DHP
Firmware: DD-WRT v3.0-r33006 std (08/03/17)
作为密码中的字符数。你怎么能有1.5个字符?只需使用double
。
要检查字符是数字,小写还是大写,请使用Character类(不要依赖ASCII值):
int
要生成给定长度的随机字母数字字符串,请查看此SO post的已接受答案。有很多不同的方法可以做到,但这是一个好的开始。
答案 1 :(得分:0)
这里有几个不同的问题,所以我会尽力回答所有问题:
随机密码:
This SO question讨论随机密码生成,因此有关更多详细信息,请查看其中发布的内容,但实质上您需要使用内置于Java中的一些随机生成并从中创建一个字符串。有很多不同的方法可以做到,这个问题详细说明,所以我会留给你决定你希望如何做到这一点。
for
循环错误:
调用password.length
尝试访问密码对象中名为length
的变量。在Java中,您不能这样做,您必须使用以下方法:
password.length()
大写/小写检测
This SO question显示了一种基于char值检测字符是大写还是小写的好方法。片段:
if(input>='a'&&input<='z')
//lowercase
if(input>='A'&&input<='Z')
//uppercase
答案 2 :(得分:-1)
尝试使用简单逻辑
Use Password()
{
// Simply check length
if(length == 8)
{
// Call a method which would check that password is strong or weak. for e.g,
}
}
//您可以使用java.util.Random类与方法生成密码 例如,
char c = (char)(rnd.nextInt(128-32))+32
20x to get Bytes, which you interpret as ASCII. // If you're fine with ASCII.
// Call a method which would check that password is strong or weak.
使用给定的链接随机生成密码: