Java 我的程序落后于>;100字符密钥
我的类生成密码滞后于长度>100的密钥,并引发异常。 这是我的密钥生成器类:Java 我的程序落后于>;100字符密钥,java,Java,我的类生成密码滞后于长度>100的密钥,并引发异常。 这是我的密钥生成器类: package dialogs; import java.io.IOException; import java.util.Random; public class AdvKey { byte[] concatenateByteArrays(byte[] a, byte[] b) { byte[] result = new byte[a.length + b.length];
package dialogs;
import java.io.IOException;
import java.util.Random;
public class AdvKey {
byte[] concatenateByteArrays(byte[] a, byte[] b) {
byte[] result = new byte[a.length + b.length];
System.arraycopy(a, 0, result, 0, a.length);
System.arraycopy(b, 0, result, a.length, b.length);
return result;
}
private byte[] arr=null;
private byte[][] characters={"!@#$%^&*()_+=".getBytes(),
"1234567890".getBytes(),
"qwertyuiopasdfghjklzxcvbnm".getBytes(),
"QWERTYUIOPASDFGHJKLZXCVBNM".getBytes()};
public AdvKey(int size, boolean specials, boolean numbers, boolean charactersb, boolean bigCharacters) throws IOException {
byte[] characters1 = new byte[512];
characters1="1234567890".getBytes();
if(specials){
characters1=concatenateByteArrays(characters1, characters[0]);
}
if(numbers){
characters1=concatenateByteArrays(characters1, characters[1]);
}
if(charactersb){
characters1=concatenateByteArrays(characters1, characters[2]);
}
if(bigCharacters){
characters1=concatenateByteArrays(characters1, characters[3]);
}
arr=new byte[size];
Random r = new Random();
r.setSeed(System.currentTimeMillis());
for(int i = 0; i < arr.length; i++){
arr[i]=characters1[r.nextInt((characters1.length - 0) + 1) + 0];
}
}
@Override
public String toString(){
return new String(arr);
}
}
这是你必须改变的路线
arr[i]=characters1[r.nextInt((characters1.length - 0) + 1) + 0];
到
Random#nextInt
将生成从0
到输入-1的数字。如果使用的是characters1.length+1
,则要求程序生成从0
到characters1.length
的数字。由于数组的长度始终为lastIndex+1
,因此您将获得ArrayIndexOutOfBoundsException
例子
如果数组的长度是84,那么实际上是要求生成0到84之间的数字(85个元素,因此多了一个)
PS:-0
和+0
是怎么回事?:) 你真的减了零?然后又加了一次?o、 0您的错误可能是您想在此处减去一。。。
String output = new AdvKey(200, true, true, true, true).toString();
arr[i]=characters1[r.nextInt((characters1.length - 0) + 1) + 0];
arr[i]=characters1[r.nextInt(characters1.length)];