Uso la sicurezza Spring per le applicazioni Web Java e ho scritto un provider di autenticazione che funziona senza sale e ora voglio aggiungere sale o in alternativa utilizzare gli algoritmi incorporati con la sicurezza Spring che sembra essere SHA e che possono usare salt che è specificato con XML. Nel mio caso non ho usato SHA ma AES e la password di input è abbinata alla stringa crittografica che è stata codificata, ad es. �[�s�E�
qh % "5% g" 2T $ 'che corrisponderà al back-end in questo gestore.
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
String name = authentication.getName();
String password = authentication.getCredentials().toString();
AdministratorAccount administratorAccount = administratorAccountService.get(name);
CryptographyProviderAES256 aes256CryptographyProvider = new CryptographyProviderAES256(256);
byte[] mockSecretCode = new StringBuilder().append("qwertyuiqwertyui").toString().getBytes();
byte[] encrypted = aes256CryptographyProvider.encrypt(password.getBytes(), mockSecretCode);
//TODO: salt
if (administratorAccount.getPassword().equals(new String(encrypted))) {
List<GrantedAuthority> grantedAuths = new ArrayList<>();
grantedAuths.add(new SimpleGrantedAuthority("ROLE_USER"));
Authentication auth = new UsernamePasswordAuthenticationToken(name, password, grantedAuths);
return auth;
} else {
return null;
}
}
Dovrei usare SHA invece che è integrato con Spring Security e che può essere aggiunto con XML? La mia classe Account ha variabili per password e sale, come dovrei implementare un salt? Devo generare un tempo di sale + casuale durante la creazione dell'account in questo modo:
final Random r = new SecureRandom();
byte[] salt = new byte[32];
r.nextBytes(salt);