Resolved Хэширование пароля spring api

damka

Heir
Customer
Всем привет!

Есть похожая тема : https://lucera2.com/threads/xehshirovanie-parolja.3943/#post-28338

Из этой темы вычитал,что сначало надо шифровать в sha256 , полученый результат - в base64

Имею такой метод сервиса для регистрации :

public ResponseEntity createAccaunt(SiteRegistrationRequest regAcc) throws AccountExceptions {
Accounts acc = new Accounts();
acc.setL2email(regAcc.getL2email());
acc.setLogin(regAcc.getLogin());
String hashedPassword = passwordEncoder.encode(regAcc.getPassword());
String base64EncodedPassword = Base64.getEncoder()
.encodeToString(hashedPassword.getBytes(StandardCharsets.UTF_8));
acc.setPassword(base64EncodedPassword);
acc.setBan_expire(0);
acc.setAllow_ip("");
serverAccountsRep.save(acc);

return ResponseEntity.ok("Ваш акаунт зарегистрирован на сервере");
}


при попытке входа на сервер получаю ошибку не правильного пароля. Через скрипт создания акаунта в аут сервере все ок.

Что я упускаю или что не правильно делаю ?
 
создай через игру пароль 123456
открой бд, и смотри на результат хеша, совпадает ли он
 
создай через игру пароль 123456
открой бд, и смотри на результат хеша, совпадает ли он
у меня на 1 акаунте (через апи) пароль тест,через криейтор акаунта сделал 2 акаунт с паролем test , хеши не совпадают. Буду думать дальше , прийдется таки лезть в батник ,и смотреть,как там создается пароль :D Надеюсь поможет
 
может это поможет
 
может это поможет
cейчас попробую покопать в сторону whirlpool2 , ибо криптер свой Дизер так запутал что чорт ногу сломит,но так и задумано так что понять можна :D
 
Проблему решил ,солью в доступ ,может кому пригодится , если пригодилось - киньте лайк :)

Все писалось в ChatGPT o3-mini-hight ,самая последняя версия на 02.02.2025

Класс енкодера :
package com.example.absoluteweb.config;

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.Security;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.util.encoders.Hex;
import org.springframework.security.crypto.password.PasswordEncoder;

public class Whirlpool2PasswordEncoder implements PasswordEncoder {

static {
if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) {
Security.addProvider(new BouncyCastleProvider());
}
}

@Override
public String encode(CharSequence rawPassword) {
try {
MessageDigest digest = MessageDigest.getInstance("WHIRLPOOL", "BC");
byte[] hashBytes = digest.digest(rawPassword.toString().getBytes(StandardCharsets.UTF_8));
return new String(Hex.encode(hashBytes));
} catch (NoSuchAlgorithmException | NoSuchProviderException e) {
throw new RuntimeException("Помилка при хешуванні пароля", e);
}
}

@Override
public boolean matches(CharSequence rawPassword, String encodedPassword) {
return encode(rawPassword).equals(encodedPassword);
}
}





Метод сохранения акаунта(часть шифровки пароля) :


try {
if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) {
Security.addProvider(new BouncyCastleProvider());
}
MessageDigest md = MessageDigest.getInstance("WHIRLPOOL", "BC");
byte[] hashBytes = md.digest(regAcc.getPassword().getBytes(StandardCharsets.UTF_8));
String encodedPassword = Base64.getEncoder().encodeToString(hashBytes);
acc.setPassword(encodedPassword);
} catch (Exception ex) {
throw new AccountExceptions("Помилка шифрування пароля");
}
 
Back
Top