Problema Geração de MD5 + Spring Security

Olá!

Estou utilizando spring security em uma aplicação e estou enfrentando o seguinte problema, quando crio alguma senha com acento não consigo logar no meu sistema.
Já estou salvando a senha em MD5 desta forma:

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

e minha configuração no spring é:

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

Alguém tem alguma idéia?

Desde já agradeço =]

Acho que o problema é aqui:

messageDigest.update(senha.getBytes(),0, senha.length());

Testa assim:

byte[] bytesSenha = senha.getBytes(); messageDigest.update(bytesSenha); String senhaMD5 = new String(messageDigest.digest());

Olá Isjunior, obrigado pela resposta, mas ainda não resolveu foi gerado alguns caracteres estranhos da forma que vc sugeriu.

Vc tem que aplicar o base64 ou hex para deixar de acordo com o que vc precisa.

Olá Pessoal!

Na verdade o problema me parece ser de encoding, ou seja, no form de login do spring está bagunçando a acentuação.

Alguém tem alguma idéia?

Foi o que eu disse, vc além de aplicar o MD5 vc precisa aplicar base64 ou hex nos bytes.

Olá!

Então na verdade fiz uns testes e percebi quando o username está com acento não é possível logar, então acho que não é problema na geração do MD5.
Já coloquei um filtro no meu web.xml que seta o encoding para UTF-8.
Alguém tem alguma idéia?

Olha lá na documentação deles:

http://static.springsource.org/spring-security/site/docs/3.2.x/reference/ns-config.html#ns-password-encoder

Por padrão é aplicado o base64 na senha.

<security:password-encoder base64="true" hash="md5">

Então para obter a senha dessa forma tem que fazer isso:

[code]import java.security.MessageDigest;

import sun.misc.BASE64Encoder;

public class SenhaTest {

public static void main(String[] args) {
	try {
		String senha = "SenhaMuitoComplicada";
		MessageDigest messageDigest = MessageDigest.getInstance("MD5");
		messageDigest.update(senha.getBytes());
		byte[] md5 = messageDigest.digest();
		String base64 = new BASE64Encoder().encode(md5);
		System.out.println("Senha    : " + senha);
		System.out.println("Senha(MD5: " + base64);
	} catch (Exception e) {
		e.printStackTrace();
	}
}

}[/code]

Sobre o encoding vc pode ajustar na página, no servidor e no sistema operacional.Vale a pensa criar um JSP com um campo de texto para verificar se está realmente com problema de charset. É bem mais facil testar e arumar.

[code]<%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8”%>

<%
String text = request.getParameter(“text”);
%>

[/code]