Pergunta

Eu tenho um aplicativo java web usando Spring Framework e segurança da mola para seu login. No meu banco de dados Eu tenho minhas senhas criptografadas para MD5 antes de ser salvo. Eu adicionei no meu aplicativo-config.xml este códigos

 <security:authentication-provider>
<security:password-encoder hash="md5"/>
<security:jdbc-user-service
        data-source-ref="dataSource"
        users-by-username-query="select user_name username, user_password password, 1 enabled from users where user_name=?"
        authorities-by-username-query="select username, authority from authorities where username=?" />
</security:authentication-provider>

Na primeira Funcionou quando a senha no db não foram criptografados. Mas quando eu criptografada-lo e adicionado este trecho no meu aplicativo de configuração

      <security:password-encoder hash="md5"/>

Eu não sou capaz de login.

Foi útil?

Solução

Como você está criando seus hashes MD5? Algo como o seguinte funciona bem em Java:

MessageDigest messageDigest = MessageDigest.getInstance("MD5");  
messageDigest.update(user.getPassword().getBytes(),0, user.getPassword().length());  
String hashedPass = new BigInteger(1,messageDigest.digest()).toString(16);  
if (hashedPass.length() < 32) {
   hashedPass = "0" + hashedPass; 
}

Quando você codificar "coala" você começa "a564de63c2d0da68cf47586ee05984d7"?

Outras dicas

Sei que isso é um pouco tarde, mas Primavera foi construído com classes que fazem isso muito mais fácil.

@Test
public void testSpringEncoder() {
    PasswordEncoder encoder = new Md5PasswordEncoder();
    String hashedPass = encoder.encodePassword("koala", null);

    assertEquals("a564de63c2d0da68cf47586ee05984d7", hashedPass);
}

Este é um teste de unidade que eu escrevi usando o construído em código Spring Security, é muito menor do que o código MessageDigest e desde que você está usando Spring Security, já que você deve ter as classes em seu classpath já.

Você já leu href="http://static.springsource.org/spring-security/site/docs/3.0.x/reference/core-services.html#d4e1146" 6.3 .3 Hashing e seção Autenticação do manual de referência do Spring Security? Ele mencionou alguns possíveis problemas que você pode encontrar no uso de hashing de senha.

Algumas possibilidades que listadas:

  • senha de banco de dados de hash pode estar em Base64, enquanto o resultado de MD5PasswordEncoder está em hexadecimal cordas
  • A sua senha de hash pode estar em maiúsculas, enquanto o resultado do codificador é em menores cordas casos
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top