Dev (Back & Front)ARTIGO

Criptografando senha com Spring Security

No artigo de hoje vamos ver como criptografar senha usando o Spring Security. O objetivo é que a senha do usuário não seja salva no seu banco de dados.

Olá, pessoal!

No artigo de hoje vamos ver como criptografar senha usando o Spring Security. O objetivo é que a senha do usuário não seja salva no seu banco de dados, e já sabemos o motivo de fazer isso. Não vou entrar nos detalhes.

Requisitos

  • Baixe a versão mais recente do SpringSecurity (para o post estou usando a versão 3.2.x);

Há várias soluções na internet, desde usando o Java puro ou usando APIs, frameworks para criptografar a senha, e para quem está usando o SpringSecurity no projeto tem uma vantagem: já tem uma classe implementada pelo pessoal do Spring que faz isso em uma linha. Vejamos a classe que criei a seguir para fazer isso. Vejam como é simples: 

public abstract class GenerateHashPasswordUtil {
	
	private static Object salt;


	public static String generateHash(String password) {
		MessageDigestPasswordEncoder digestPasswordEncoder = getInstanceMessageDisterPassword();
		String encodePassword = digestPasswordEncoder.encodePassword(password, salt);
		return encodePassword;
	}

	private static MessageDigestPasswordEncoder getInstanceMessageDisterPassword() {
//informo tipo de enconding que desejo 
MessageDigestPasswordEncoder 	digestPasswordEncoder = new MessageDigestPasswordEncoder("MD5");
		return digestPasswordEncoder;
	}
	//método que faz a validação  como não usamos salt deixei em null
	public static boolean isPasswordValid(String password, String hashPassword) {
	MessageDigestPasswordEncoder digestPasswordEncoder = getInstanceMessageDisterPassword();
		return digestPasswordEncoder.isPasswordValid(hashPassword, password, salt);
	}
}
E aqui a classe de teste que valida alguns cenários: 
public class GenerateHashPasswordUtilTest {

	@Test
	public void testHashWasGenerateWithSuccess() {
		String password="1234";
		assertNotNull(GenerateHashPasswordUtil.generateHash(password));
	}
	@Test
	public void testValidIfPasswordIsValidAfterHashed(){
		String password="brazil";
		 String hashPassword =GenerateHashPasswordUtil.generateHash(password);
 boolean expectedValidPassword = GenerateHashPasswordUtil.isPasswordValid(password, hashPassword);
		assertTrue(expectedValidPassword);
	}
	@Test
	public void testPassWordIsNotEqualToHashCodeGenerated(){
		String password = "XPto";
		String passwordhash = GenerateHashPasswordUtil.generateHash(password);
		String passwordTyped = "xPto";
		boolean expectedInvalidPassword = GenerateHashPasswordUtil.isPasswordValid(passwordTyped, passwordhash);
		assertFalse(expectedInvalidPassword);
	}

}

Curtiu? Se quiser ver o código hash basta imprimir no console.

Abraços e vou ficando por aqui.

é Bacharel em Sistemas de Informação e Especialista em Gestão e Estratégia de Negócios. Trabalha com TI desde 2003 e possui as certificações SCJP 5 e SCM. Trabalhou na IBM Brasil como Analista Programador Java, passou pelo laboratório da Enterprise Computing Lab (ECL) HP como Software Engineer, Ci&T como Engenheiro de Software em projeto JEE. Tem experiência internacional em Índia, Dubai e Londres. Atualmente é cofundador da ITSLabs (www.itslabs.com.br), uma start-up focada na criação de produtos web e mobile para start-ups. Também é autor dos livros "Guia do Exame SCJP", "Guia Prático JEE com Frameworks" e "TDD na prática".

Ver perfil