AES_DECRYPT для кода входа в систему JFrame не работает - PullRequest
0 голосов
/ 24 апреля 2018

У меня проблемы с пониманием того, что связано с AES_DECRYPT. Я сделал тестовую базу данных в SQL и таблицу tblKorisnici в нем. У меня возникли проблемы с сифрой, в которой хранятся данные с использованием AES_ENCRYPT через MySQL.

Проблема в том, что я хочу, чтобы приложение проверяло корисник и сифру, если оба совпадения lblInfo должны отображать текст, если данные для входа были введены правильно, есть ли пользователь с указанным корисником и сифрой в таблице.

    private void btnPotvrdiActionPerformed(java.awt.event.ActionEvent evt) {                                           
    String sql = "SELECT korisnik, AES_DECRYPT(sifra, 'sometext'), ime, prezime, pozicija FROM tblKorisnici WHERE korisnik = ? AND sifra = ?";
    try {
        konekcija = DriverManager.getConnection("jdbc:mysql://localhost/lpa", "root", "");
        pst = konekcija.prepareStatement(sql);
        pst.setString(1, txtKorisnik.getText());
        pst.setString(2, pasSifra.getText());
        rs = pst.executeQuery();
        if (rs.next()) {
            lblInfo.setText("Login success");
        }
        else {
            lblInfo.setText("Wrong");
        }
    }
    catch (SQLException | HeadlessException ex){
        JOptionPane.showMessageDialog(null, ex);
    }
}  

Но почему-то я не могу заставить это работать. korisnik, sifra, ime, prezime и pozicija являются полями в таблице, только sifra шифруется с использованием AES_ENCRYPT и «sometext» в качестве ключа шифрования.

Я не получаю никаких ошибок, просто не работает, как задумано. Вероятно, что-то с расшифровкой сифры, потому что, когда я пробую поле сифры без шифрования с данными, все работает.

1 Ответ

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

Проблема в вашем предложении WHERE.Вы пытаетесь сравнить зашифрованное значение sifra с незашифрованным значением pasSifra.Вам нужно либо зашифровать pasSifra (предпочтительно), либо расшифровать sifra в предложении where.

Попробуйте изменить свой запрос следующим образом:

sql = "SELECT korisnik, AES_DECRYPT(sifra, 'sometext'), ime, prezime, pozicija
         FROM tblKorisnici
        WHERE korisnik = ? AND sifra = AES_ENCRYPT(?,'sometext')"

Я бы также рекомендовал не возвращатьнезашифрованная версия sifra, поскольку это проверка подлинности.Если все, что вам нужно, это определить, существует ли соответствующая запись, вы можете сократить свой запрос до этого:

sql = "SELECT 1 FROM tblKorisnici
        WHERE korisnik = ? AND sifra = AES_ENCRYPT(?,'sometext')"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...