Java:这段代码安全吗?
我正在制作一个Android应用程序,目前已经创建了一些用于生成代码的代码。生成的代码将被数据库检查,以查看代码是否正在使用。如果是,它将重新生成另一个代码,直到找到未使用的代码。这是使用do while循环完成的,虽然没有代码,但不会对用户造成明显的延迟。然而,如果有大量的代码,就会有明显的延迟,不是吗?代码如下:Java:这段代码安全吗?,java,android,thread-safety,Java,Android,Thread Safety,我正在制作一个Android应用程序,目前已经创建了一些用于生成代码的代码。生成的代码将被数据库检查,以查看代码是否正在使用。如果是,它将重新生成另一个代码,直到找到未使用的代码。这是使用do while循环完成的,虽然没有代码,但不会对用户造成明显的延迟。然而,如果有大量的代码,就会有明显的延迟,不是吗?代码如下: public static String generateCode(DBAdapter myDB, String mgrName){ String[] name = mgr
public static String generateCode(DBAdapter myDB, String mgrName){
String[] name = mgrName.split(" +");
String fName = name[0];
String lName = name[1];
String fLetter = fName.substring(0, 1).toUpperCase();
String lLetter = lName.substring(0, 3).toUpperCase();
int randomPIN = (int) (Math.random() * 9000) + 1000;
String pin = String.valueOf(randomPIN);
String letters = new StringBuilder().append(fLetter).append(lLetter).append(pin).toString();
Boolean result = checkCode(myDB, letters);
if(result == true){
return(letters);
}
else{
String code = "";
Boolean resultfail = false;
do{
int randomPINFail = (int) (Math.random() * 9000) + 1000;
String generatedCode = new StringBuilder().append(fLetter).append(lLetter).append(randomPINFail).toString();
Boolean check = checkCode(myDB, generatedCode);
if(check){
resultfail = true;
code = generatedCode;
}
}while(!resultfail);
return code;
}
}
public static Boolean checkCode(DBAdapter myDB, String code){
Cursor cursor = myDB.getRowComplaint(code);
if(cursor.getCount() == 0){
return true;
}
else{
return false;
}
}
我的问题是,生成器选择一个已经使用了很多次的代码,用户会注意到延迟的可能性有多大?请记住,生成器将使用不同的管理器名称以及不同的编号。这个代码使用起来安全吗?如果没有,可以采取什么措施使其安全
编辑:我不能使用UUID,因为用户要求代码包含四个字母和四个数字。代码用于从数据库中检索数据,这就是为什么它需要是唯一的。与任何性能相关的问题一样,我们无法回答-您应该通过创建大量现有行,然后查看它的速度来分析它 就安全性而言,这是一个非常宽泛的术语,我不知道您使用这些代码的目的是什么,所以我不能轻松地告诉您代码是安全的。但是,您访问数据库的方式似乎没有任何可怕的问题。只需使用UUID类或任何其他内置的伪随机数生成器-不要重新发明轮子。理论上,它们提供的冲突率非常小,在绝大多数情况下,您第一次尝试时都会生成唯一的id。但再一次,这取决于您的用例。我假设您正在做一些理智的事情,而不是在移动设备上生成和存储数以百万计的代码
请确保不要从主线程调用此例程-在这种情况下,即使数据库为空,用户也可能会注意到延迟。使用if-check而不是ifcheck==true。谢谢,Christian,我会这样做,但代码总体上可以安全使用吗?您是否希望有数百名用户?成千上万的用户?数十万用户?正如你所说,这显然取决于你数据库中的代码数量,我们不知道。。。如果你想避免冲突,谷歌生成独特的IDS代码是可怕的,重写它没有递归和循环中的数据库调用。好的,谢谢,我会做一些背景研究。尽管我只是想确保代码在总体上是安全的。我听说过使用无限循环的问题。这可能是什么。这怎么可能是一个无限循环?@peggy如果一个管理者的所有代码都生成了10000个,因为它是4位数字。没有可能生成的代码。因此,结果总是错误的。这意味着while循环永远不会结束。这将导致应用程序崩溃。不过,你可以监控是否有10000个代码在使用,并根据需要进行处理。。还有,为什么10000只算作4个随机数,考虑到随机字母也是10*10*10*10*26*26*26*26*26=4569760000,代码需要记住或写下来,你看。稍后将使用此代码检索数据。最终用户请求了四个字母和四个数字,这就是我不能使用UUID的原因。否则我会的。