解密在用户的ArrayList中找到的所有用户名?

时间:2015-04-16 20:48:03

标签: java encryption arraylist

我正在使用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)进行比较?有可能吗?

3 个答案:

答案 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)

我根本不知道你为什么要加密用户名,但根本不需要对它们进行解密来比较它们。只需比较加密的用户名即可。