我正在使用Java-Server构建Android Messenger。
显然用户需要登录。如何存储密码和用户名以及如何在用户尝试登录时进行检查? 关于安全性我假设只使用Hashmap并不是一个好主意。 另一方面,考虑性能,我问自己是否应该使用SQL数据库(或类似的)。如何处理安全问题?
我不认为在服务器上使用Java是由于性能等原因而专业地执行此操作的方式,但我已经了解Java并且它只是一个学习项目。
答案 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;
}
我认为这会有所帮助 感谢.........