Utilizo Spring Security para aplicaciones web Java y he escrito un proveedor de autenticación que funciona sin sal y ahora quiero agregar sal o, alternativamente, usar los algoritmos incorporados con seguridad Spring que parecen ser SHA y que pueden usar sal que se especifica con XML. En mi caso, no usé SHA pero AES y la contraseña de entrada se compara con una cadena criptográfica codificada, por ejemplo. �[�s�E�
qh % "5% g" 2T $ 'que coincidirá con el back-end en este controlador.
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;
}
}
¿Debo usar SHA en su lugar que está integrado con la seguridad de Spring y se puede agregar con XML en su lugar? Mi clase de cuenta tiene variables para contraseña y sal, ¿cómo debo implementar una sal? ¿Debo generar un salt de time + random al crear la cuenta de esta forma?
final Random r = new SecureRandom();
byte[] salt = new byte[32];
r.nextBytes(salt);