Back-End

29 abr, 2014

Criptografando senha com Spring Security

Publicidade

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.