Зарегистрироваться / Войти используя MD5 хэш-пароль JAVA - PullRequest
0 голосов
/ 24 апреля 2018

Я пытаюсь создать систему входа / регистрации, которая использует хешированные пароли MD5.

До сих пор мне удавалось хэшировать пароли в базе данных, однако она не распознает хешированные пароли при попытке входа в систему.

Вероятно, это простое исправление, подойдет любая помощь:)

РЕГИСТРАЦИЯ JAVA

String s8 = tfPassword.getText();

MessageDigest md = MessageDigest.getInstance("MD5");
                        md.update(s8.getBytes());
                        byte [] byteData = md.digest();

                        StringBuilder sb = new StringBuilder(32);
                        for (byte b : byteData) {
                            sb.append(String.format("%02x", b & 0xff));
                        }

Statement st = con.createStatement();

st.executeUpdate("insert into Login (StaffID, UName, PWord, Staff) values('"+StaffID+"','"+s7+"','"+sb+"','Yes')");

ВХОД JAVA:

String s2 = tfPassword.getText();

                    MessageDigest md = MessageDigest.getInstance("MD5");
                    md.update(s2.getBytes());
                    byte [] byteData = md.digest();

                    StringBuilder sb = new StringBuilder(32);
                    for (byte b : byteData) {
                        sb.append(String.format("%02x", b & 0xff));
                    }

                    Statement st = con.createStatement();   


                    // SQL Statements 
                    st.executeQuery("SELECT * FROM login WHERE UName= '"+s1+"' and PWord = '"+sb+"'");

1 Ответ

0 голосов
/ 24 апреля 2018

Для будущих SO, которые найдут этот вопрос в своем поиске ответа на вопрос "MD5 хэш-пароль":

Использование MD5-хеша для паролей нарушено . Не делай этого.

https://security.stackexchange.com/questions/19906/is-md5-considered-insecure

Пока мы говорим о безопасности, мы также будем поощрять использование подготовленных операторов с заполнителями связывания вместо написания динамического SQL, который (или кажется) уязвим для SQL-инъекций.


Похоже, вопрос был не о MD5 для паролей вообще. Похоже, это действительно гораздо более простой вопрос:

В: Как мне узнать, вернул ли выполненный оператор SELECT (ny) строку (и)?

A: Метод executeQuery возвращает объект ResultSet, если оператор, если оператор SQL является SELECT. Используйте метод next для извлечения следующей строки из набора результатов.

Примерно так:

    Statement st = null;
    ResultSet rs = null;

    try {

      st = con.CreateStatement();
      rs = st.executeQuery("SELECT '42' AS fortytwo");

      while( rs.next() ) {
        String foo = rs.getString("fortytwo");
        // System.out.println("yay! we got another row!");
      }

    } catch (SQLException e) {
      //
    } finally {
       if (rs != null) { rs.close(); }
       ...
...