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

时间:2015-04-23 13:54:15

标签: java android sql messenger

我正在使用Java-Server构建Android Messenger。

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

我不认为在服务器上使用Java是由于性能等原因而专业地执行此操作的方式,但我已经了解Java并且它只是一个学习项目。

2 个答案:

答案 0 :(得分:3)

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

我强烈建议您使用Android Account Manager这里有几个教程,但是this one is my favorite

Edwin的补充:

如果您使用自己的身份验证和服务器:仅在哈希/加密后发送身份验证信息 ,然后在服务器端解密。此外,此图片可能会导致general idea of this kind of flow

答案 1 :(得分:0)

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

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
}

然后调用方法

public String getEncryptWord(String txt) {
    return new Encryption().base64encode(txt);
}

在控制器类

 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;
}

我认为这会有所帮助 感谢.........