md5 java != md5 php

3 respostas
V

O fato é o seguinte , ta difícil o negocio aqui pra integrar php4 e java !
primeiro foi com o RSA foi dificil ajustar os algoritmos principalmente por causa de charset !

E agora isso !

Usando isso aqui pra calcular o md5 de um arquivo:
public static String calculate(String path)
{
	
	String output = new String();
	
try
{
InputStream is = new FileInputStream(new File(path));	
MessageDigest digest = MessageDigest.getInstance("MD5");
DigestInputStream digin = new DigestInputStream(is,digest);
byte[] buffer = new byte[4096];
	try{
		while ( digin.read(buffer, 0, 4096) != - 1)  
		{  
			//Do nothing, the digest is calculated automatically as file is read in.      
		}
	byte[] md5sum = digest.digest();
	BigInteger bigInt = new BigInteger(1, md5sum);
	output = bigInt.toString(16);
	}
	catch(Exception e) 
	{
	throw new RuntimeException("Unable to process file for MD5", e);
	}
	finally
	{
		try
			{
			is.close();
			}
			catch(IOException e)
			{
			throw new RuntimeException("Unable to close input stream for MD5 calculation", e);
			}
	}		
}
catch(Exception ex){;}
	
	return output;
}

Ele me retorna um md5 diferente do php , porém por incrível que pareça na maioria das vezes os Hashs batem , mas em alguns casos eles diferem ! lendo vi alguma coisa dizendo que pode ter alguma disparidade
nos charsets em sistemas operacionais diferentes ! Mas eu fico meio na duvida pq ambos rodam em win32(windows) .

Eu acredito que o java que ta fazendo coisa errada porque usando o openssl ele tambem me retornou um hash igual ao do php.

Alguma sugestão ?

3 Respostas

T

Colega,

da uma olhada nesse link

http://www.guj.com.br/posts/list/46888.java

creio q possa lhe ajudar

abraços

V

trinka:
Colega,

da uma olhada nesse link

http://www.guj.com.br/posts/list/46888.java

creio q possa lhe ajudar

abraços

Notou a semelhança do algoritmo ?
Foi exatamente neste tópico que li o que eu disse !
Porém neste caso não são strings em que se usa o getBytes() e que é possivel selecionar o charset
getBytes(“UTF-8”) , por exemplo .

Neste caso , é um inputStream e quem trata os bytes é o DigestInputStream , e ele não me permite
selecionar o charset (pelo menos não encontrei nada nos métodos nativos ) !

Se é que o problema é com charset ! :wink:

V

Fiquei impressionado com a velocidade com que os tópicos estão descendo !
pelo que vi , não vai sair nada !
Eu ia tentar fazer igual eu fiz com o RSA , sem usar nada pronto usando as proprias funções matematicas !
só que as funções matematicas do md5 são muito complicadas e por hora eu preferi trocar de hash !

Foi a unica solução e aparantemente deu certo ! estou usando SHA-1 , mas mesmo assim se alguém tiver alguma solução pro md5 ainda será bem vinda !

Criado 25 de junho de 2008
Ultima resposta 27 de jun. de 2008
Respostas 3
Participantes 2