2017-07-24 180 views
0

我想在我的應用程序散列的字符串密碼,我在網上搜索的例子,但我不明白我將如何能夠實施在我的情況下,有人可能會顯示我舉一個如何正確使用我的代碼實現散列的例子。謝謝我怎樣才能在我的應用程序散列密碼

package ie.example.artur.adminapp; 

    import android.os.AsyncTask; 
    import android.os.Bundle; 
    import android.support.design.widget.FloatingActionButton; 
    import android.support.design.widget.Snackbar; 
    import android.support.v7.app.AppCompatActivity; 
    import android.support.v7.widget.Toolbar; 
    import android.view.View; 
    import android.view.Menu; 
    import android.view.MenuItem; 
    import android.widget.Button; 
    import android.widget.EditText; 
    import android.widget.TextView; 

    import java.sql.Connection; 
    import java.sql.DriverManager; 
    import java.sql.Statement; 

    public class MainActivity extends AppCompatActivity { 


     EditText editTextName,editTextEmail,editTextPassword; 
     TextView textView; 
     private static final String DB_URL = "jdbc:mysql://10.3.2.51/socialmedia_website"; 
     private static final String USER = "zzz"; 
     private static final String PASS = "zzz"; 



     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_register); 

      textView = (TextView) findViewById(R.id.textView); 
      editTextName = (EditText) findViewById(R.id.editTextName); 
      editTextEmail = (EditText) findViewById(R.id.editTextEmail); 
      editTextPassword = (EditText) findViewById(R.id.editTextPassword); 

      Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
      setSupportActionBar(toolbar); 

      FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
      fab.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
          .setAction("Action", null).show(); 
       } 
      }); 
     } 

     public void btnConn(View view) { 
      Send objSend = new Send(); 
      objSend.execute(""); 


     } 

     private class Send extends AsyncTask<String, String, String> 

     { 
      String msg = ""; 
      String name = editTextName.getText().toString(); 
      String email = editTextEmail.getText().toString(); 
      String password = editTextPassword.getText().toString(); 

      @Override 
      protected void onPreExecute() { 
       textView.setText("Please Wait Inserting Data"); 
      } 

      @Override 
      protected String doInBackground(String... strings) { 
       try { 
        Class.forName("com.mysql.jdbc.Driver"); 
        Connection conn = DriverManager.getConnection(DB_URL, USER, PASS); 
        if (conn == null) { 
         msg = "Connection goes wrong"; 
        } else { 
         String query = "Insert INTO users (name,email,password) VALUES('" + name+"','"+email+"','"+password+"')"; 
         Statement stmt = conn.createStatement(); 
         stmt.executeUpdate(query); 
         msg = "Inserting Successful!!"; 

        } 

        conn.close(); 

      } 

      catch(
      Exception e 
      ) 

      { 
       msg = "Connection goes Wrong"; 
       e.printStackTrace(); 

      } 

      return msg; 


     } 



    @Override 
     protected void onPostExecute(String msg) {textView.setText(msg);} 



     } 

} 
+0

您應該使用數據庫的PASSWORD函數,並且您應該使用預準備語句。 – EJP

+0

你在看什麼樣的哈希。你有什麼嘗試?你想要MD5或SHA1哈希? –

+0

您的問題是重複此鏈接將幫助你。 https://stackoverflow.com/questions/3934331/how-to-hash-a-string-in-android –

回答

4

好的。根據評論中的討論。所以在你的類中輸入密碼作爲輸入,你必須實現這個方法。

所以你必須做的是在你的課堂上實現答案方法。所以下面添加方法在你的類 -

public String md5(String s) { 
try { 
    // Create MD5 Hash 
    MessageDigest digest = java.security.MessageDigest.getInstance("MD5"); 
    digest.update(s.getBytes()); 
    byte messageDigest[] = digest.digest(); 

    // Create Hex String 
    StringBuffer hexString = new StringBuffer(); 
    for (int i=0; i<messageDigest.length; i++) 
     hexString.append(Integer.toHexString(0xFF & messageDigest[i])); 
    return hexString.toString(); 

} catch (NoSuchAlgorithmException e) { 
    e.printStackTrace(); 
} 
return ""; 
} 

現在在你的異步任務,你這樣做 -

String password = editTextPassword.getText().toString(); 

這個值,而不是傳遞給你的MD5的方法以獲得散列碼作爲密碼。

String password = md5(editTextPassword.getText().toString()); 
+0

非常感謝,從來沒有想過這麼做很容易做到......一個小問題,SHA1會以類似的方式完成嗎? – Lucy

+0

是的,你可以用同樣的方法做到這一點。只是算法會改變。請參閱下面的鏈接SHA1 https://stackoverflow.com/questions/5980658/how-to-sha1-hash-a-string-in-android –

+0

再次感謝先生! – Lucy