我正在使用Java上的简单登录系统,而且我无法解密存储在用户的ArrayList中的所有用户名(Users.java包含int userId,String username和String password),以便我可以将它们与新注册的用户名进行比较以检查重复项,并在用户名已存在的情况下通过服务器向客户端发送错误的布尔值。
我不确定如何一次解密每个用户名?我已经在各个用户名上测试了我的解密方法,解密工作正常。我到目前为止所尝试的是......
一个高级for循环,用于暂时添加所有已解密的用户名,另一个高级for循环遍历temp ArrayList并检查是否在该ArrayList中找到了新的已解密用户名;
String dUsername = aes.decrypt(eUsername);
boolean isRegistered = false;
List<String> temp = new ArrayList<>();
for (Users users : usersList) {
temp.add(aes.decrypt(users.getUsername()));
}
for (String usernames : temp) {
if (!usernames.equals(dUsername))
isRegistered = true;
}
这不起作用。
eUsername是加密的用户名,isRegistered将向客户端发送true / false,具体取决于用户名是否重复。我怎样才能获得usersList ArrayList中的所有用户名,并解密所有值,以便我可以将它们与解密的eUsername(dUsername)进行比较?有可能吗?
答案 0 :(得分:1)
这应该有效:
String dUsername = aes.decrypt(eUsername);
boolean isRegistered = false;
List<String> temp = new ArrayList<>();
for (Users users : usersList) {
temp.add(aes.decrypt(users.getUsername()));
}
for (String usernames : temp) {
if (usernames.equals(dUsername)) {
isRegistered = true;
break;
}
}
return !isRegistered;
注意循环中条件的否定以及结果在结束时被否定。如果userList
中有多个用户,您显然至少有一个用户条件!usernames.equals(dUsername)
为真,在这种情况下isRegistered
将设置为true
,找到实际的副本时,永远不会返回。因此,您需要在此列表中查找仅副本,因为它是一次性事件
之后,您可以否定结果以表示已检查的用户名是唯一的。
您似乎通过迭代usersList
成功解密了用户名。由于您只对找到一个副本感兴趣(并且用户名应该是唯一的),您可以将这两个循环合并为一个以提高效率:
String dUsername = aes.decrypt(eUsername);
boolean isRegistered = false;
for (Users users : usersList) {
String uname = aes.decrypt(users.getUsername());
if (uname.equals(dUsername)) {
isRegistered = true;
break;
}
}
return !isRegistered;
答案 1 :(得分:0)
它总是回归&#34;真实&#34;显示用户已经注册?因为我想也许你想要:
if (usernames.equals(dUsername))
isRegistered = true;
答案 2 :(得分:0)
我根本不知道你为什么要加密用户名,但根本不需要对它们进行解密来比较它们。只需比较加密的用户名即可。