Java 如何存储用户详细信息,如密码和用户名等

Java 如何存储用户详细信息,如密码和用户名等,java,android,sql,messenger,Java,Android,Sql,Messenger,我正在用Java服务器构建一个Android Messenger 显然,用户需要登录。如何存储密码和用户名,以及在用户尝试登录时如何检查密码和用户名? 关于安全性,我认为仅仅使用Hashmap并不是一个好主意。 另一方面,在性能方面,我问自己是否应该使用SQL数据库(或类似数据库)。那里的安全是如何处理的 由于性能等原因,我不认为在服务器上使用Java是一种专业的方式。但我已经知道Java,它只是一个学习项目。如果您使用的是服务器,让他们为您处理身份验证。除非您是安全的,并且知道自己在做什么,否

我正在用Java服务器构建一个Android Messenger

显然,用户需要登录。如何存储密码和用户名,以及在用户尝试登录时如何检查密码和用户名? 关于安全性,我认为仅仅使用Hashmap并不是一个好主意。 另一方面,在性能方面,我问自己是否应该使用SQL数据库(或类似数据库)。那里的安全是如何处理的


由于性能等原因,我不认为在服务器上使用Java是一种专业的方式。但我已经知道Java,它只是一个学习项目。

如果您使用的是服务器,让他们为您处理身份验证。除非您是安全的,并且知道自己在做什么,否则您不希望自己存储用户身份验证信息

我强烈建议您使用下面的一些教程,但是


Edwin的新增内容:


如果您使用自己的身份验证和服务器:仅在对身份验证信息进行哈希/加密后发送身份验证信息,然后解密服务器端。此外,此图像可能有助于

您可以轻松使用用户名密码加密方法 试试这个:

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import java.io.IOException;
import java.io.UnsupportedEncodingException;

public class Encryption {

    public static final String DEFAULT_ENCODING="UTF-8";
    static BASE64Encoder enc=new BASE64Encoder();
    static BASE64Decoder dec=new BASE64Decoder();

    public String base64encode(String text){
        try {
            String rez = enc.encode( text.getBytes( DEFAULT_ENCODING ) );
            return rez;
        }
        catch ( UnsupportedEncodingException e ) {
            return null;
        }
    }//base64encode

    public  String base64decode(String text){

        try {
            return new String(dec.decodeBuffer( text ),DEFAULT_ENCODING);
        }
        catch ( IOException e ) {
            return null;
        }

    }//base64decode



    public  String xorMessage(String message, String key){
        try {
            if (message==null || key==null ) return null;

            char[] keys=key.toCharArray();
            char[] mesg=message.toCharArray();

            int ml=mesg.length;
            int kl=keys.length;
            char[] newmsg=new char[ml];

            for (int i=0; i<ml; i++){
                newmsg[i]=(char)(mesg[i]^keys[i%kl]);
            }//for i
            mesg=null; keys=null;
            return new String(newmsg);
        }
        catch ( Exception e ) {
            return null;
        }
    }//xorMessage
}
在控制器类中

 String password = authenticationController.getEncryptWord(user.getPassword());
现在您可以保存密码;它是加密和安全的

然后,当您选择登录方法时,可以通过这种方式进行检查

 public User login(String username, String password) {
    String userPassword = authenticationController.getEncryptWord(password);
    System.out.println("User Pass : "+userPassword);
    User user = userDAOController.searchUserByEmail(username);
    System.out.println("DB Pass : "+user.getPassword());
    User returnUser;
    if(userPassword.equals(user.getPassword())){
        System.out.println("user");
        returnUser =  userDAOController.login(username, userPassword);
    }else{
        returnUser = null;
    }
    return  returnUser;
}
我想这会有帮助的
谢谢………

您想在android应用程序中实现服务器-客户端连接吗?是的,我有一台java服务器正在运行,并从android应用程序中连接到服务器。尝试此链接您提供的URL未打开似乎是错误的!只想添加:仅在对身份验证信息进行哈希/加密时发送身份验证信息,然后对服务器端进行解密。此外,可能有助于这种流的总体思路。嗯,我使用的是服务器。。。我自己写的服务器。:)
 public User login(String username, String password) {
    String userPassword = authenticationController.getEncryptWord(password);
    System.out.println("User Pass : "+userPassword);
    User user = userDAOController.searchUserByEmail(username);
    System.out.println("DB Pass : "+user.getPassword());
    User returnUser;
    if(userPassword.equals(user.getPassword())){
        System.out.println("user");
        returnUser =  userDAOController.login(username, userPassword);
    }else{
        returnUser = null;
    }
    return  returnUser;
}