簡體   English   中英

使用哈希的用戶名和密碼登錄Android

[英]Android login with hashed username and password

我正在一個項目中,用戶必須先在應用程序中登錄才能使用它。 我的小問題是,當用戶輸入用戶名和密碼時,我必須對它們進行哈希處理並發送到服務器,而不是用戶輸入的用戶名和密碼。 所以現在我正在做這樣的事情:

EditText txtUserName = (EditText) findViewById (R.id.username_login_input);
EditText txtPassword = (EditText) findViewById (R.id.password_login_input);

HttpClient httpclient;
HttpPost httppost;
ArrayList<NameValuePair> postParameters;
httpclient = new DefaultHttpClient();
httppost = new HttpPost("http://www.rpc.shalqlqlq.com");

postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair("username_hash", hashUser(txtUserName.getText().toString(),txtPassword.getText().toString())));
postParameters.add(new BasicNameValuePair("password_hash", hashPass(txtUserName.getText().toString(),txtPassword.getText().toString())));

httppost.setEntity(new UrlEncodedFormEntity(postParameters));
HttpResponse response = httpclient.execute(httppost);
Log.w("Response ","Status line : "+ response.getStatusLine().toString());
byte[] buffer = new byte[1024];
buffer = EntityUtils.toString(response.getEntity()).getBytes();

public String hashUser(String username, String password) throws NoSuchAlgorithmException, UnsupportedEncodingException{
String hashUser = SHA1.Sha1Hash(username);
    String hashPass = SHA1.Sha1Hash(password);
    String luser = hashPass+hashUser;
    String lastUser = SHA1.Sha1Hash(luser);
    return lastUser;
}

public String hashPass(String username, String password) throws NoSuchAlgorithmException, UnsupportedEncodingException{
String hashUser = SHA1.Sha1Hash(username);
    String hashPass = SHA1.Sha1Hash(password);
    String lpass = hashPass+hashUser;        
    String lastPass = SHA1.Sha1Hash(lpass);
    return lastPass;
}

它仍然告訴我用戶名和密碼不正確。 我很確定哈希是正確的,因為我已經嘗試過了。 那么有人可以幫助我找出我的錯誤在哪里嗎?

首先,您的哈希用戶名和密碼是相同的:

public String hashUser(String username, String password) throws NoSuchAlgorithmException, UnsupportedEncodingException{
    String hashUser = SHA1.Sha1Hash(username);
    String hashPass = SHA1.Sha1Hash(password);
    String luser = hashPass+hashUser; // <-- Hashed pass + user
    String lastUser = SHA1.Sha1Hash(luser); // <-- Hashed a second time
    return lastUser;
}

public String hashPass(String username, String password) throws NoSuchAlgorithmException, UnsupportedEncodingException{
    String hashUser = SHA1.Sha1Hash(username);
    String hashPass = SHA1.Sha1Hash(password);
    String lpass = hashPass+hashUser; // <-- Hashed pass + user
    String lastPass = SHA1.Sha1Hash(lpass); // <-- Hashed a second time
    return lastPass;
}

除非服務器將用戶名和密碼分別存儲為密碼和用戶名的哈希值,否則我猜這就是您的問題所在。

為什么不只使用以下內容:

postParameters.add(new BasicNameValuePair("username_hash", SHA1.Sha1Hash(txtUserName.getText().toString())));
postParameters.add(new BasicNameValuePair("password_hash", SHA1.Sha1Hash(txtPassword.getText().toString())));

如果一切正常,我想可能是問題是從edittext獲取用戶名和密碼。

postParameters.add(new BasicNameValuePair("username_hash", hashUser(txtUserName.getText().toString(),txtPassword.getText().toString())));
postParameters.add(new BasicNameValuePair("password_hash", hashPass(txtUserName.getText().toString(),txtPassword.getText().toString())));

在某種情況下。 我想你有一個按鈕Login..so,所以在onClick方法上設置了這些參數,我認為它將起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM