【问题标题】:How to store userdetails like password and username etc [closed]如何存储用户详细信息,如密码和用户名等 [关闭]
【发布时间】:2015-04-23 13:54:15
【问题描述】:

我正在使用 Java 服务器构建 Android Messenger。

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

由于性能等原因,我不认为将 Java 用于服务器是专业的方法,但我已经了解 Java,它只是一个学习项目。

【问题讨论】:

标签: java android sql messenger


【解决方案1】:

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

我强烈推荐使用Android Account Manager 有几个教程可以解决这个问题,但是this one is my favorite


埃德温的补充:

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

【讨论】:

  • 您提供的网址打不开好像是错误的!
  • 只想添加:仅在经过哈希/加密时发送身份验证信息,然后在服务器端解密。此外,this image 可能有助于这种流程的总体思路。
  • 好吧,我正在使用服务器...我自己编写的服务器。 :)
【解决方案2】:

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

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

我认为这会有所帮助 谢谢…………

【讨论】:

    猜你喜欢
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 2021-12-25
    • 2023-02-22
    • 2011-05-15
    相关资源
    最近更新 更多