Witam. Jakie są różnice między haszowaniem a kodowaniem? W jaki sposób mogę poprawnie używać zakodowanego hasła? Gdy takie hasło zakodowane zapisze:
@PostMapping
@Transactional
@Modifying
public void saveAccountData(Account account, Model model) {
PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
if(accountRepository.takeAllNames().toString().indexOf(account.getNick()) != -1) {
model.addAttribute("registerResponse", "Podana nazwa użytkownika jest zajęta!");
}
else{
model.addAttribute("registerResponse", account.getNick() + ", zostałeś pomyślnie zarejestrowany!");
//accountRepository.save(account);
entityManager.createNativeQuery("INSERT INTO KONTA (ID, NAZWA, HASŁO) VALUES(:id, :nick, :password)")
.setParameter("id", account.getId())
.setParameter("nick", account.getNick())
.setParameter("password", passwordEncoder.encode(account.getPassword()))
.executeUpdate();
log.info("Zarejestrowano konto o nazwie: " + account.getNick());
}
}
To mam zakodowane hasło w bazie H2. Lecz kiedy chcę się zalogować na konto, to muszę użyć tych właśnie znaków powstałych po zakodowaniu. Próbowałem przy logowaniu do ifa dodać, czy jeśli zakoduję podane hasło, to będzie się równać temu zakodowanemu w bazie. Jednak te hasła zawsze kodują się inaczej :/.
@PostMapping
@Transactional
@Modifying
public void login(Account account, Model model){
PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
Query query = entityManager.createNativeQuery("SELECT HASŁO FROM KONTA WHERE NAZWA = :name");
query.setParameter("name", account.getNick());
if((accountRepository.takeAllNames().toString().indexOf(account.getNick()) == -1) || (!query.getSingleResult().equals(passwordEncoder.encode(account.getPassword())))){
model.addAttribute("loginResponse", "Błędna nazwa użytkownika lub hasło");
}
else if(query.getSingleResult().toString().equals(account.getPassword())){
model.addAttribute("loginResponse", "Udało się zalogować, dane poprawne");
}
}
Jak mam tej magii dokonać?