我怎样才能在我的应用程序散列密码

问题描述:

我想在我的应用程序散列的字符串密码,我在网上搜索的例子,但我不明白我将如何能够实施在我的情况下,有人可能会显示我举一个如何正确使用我的代码实现散列的例子。谢谢我怎样才能在我的应用程序散列密码

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://*.com/questions/3934331/how-to-hash-a-string-in-android –

好的。根据评论中的讨论。所以在你的类中输入密码作为输入,你必须实现这个方法。

所以你必须做的是在你的课堂上实现答案方法。所以下面添加方法在你的类 -

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://*.com/questions/5980658/how-to-sha1-hash-a-string-in-android –

+0

再次感谢先生! – Lucy