boone:
Esta implementação é confiável e trabalha tanto com Strings como arrays de bytes. Reveja o seu código.
Então, com as classes que o cara disponibilizou para J2ME ali, eu estava fazendo assim:
Em J2ME
private String geraHash(FileConnection novoArquivo) throws IOException {
FileConnection fcup = (FileConnection)Connector.open(novoArquivo.getURL(), Connector.READ);
InputStream leArquivo = fcup.openInputStream();
byte[] buffer = new byte[(int)fcup.fileSize()];
leArquivo.read(buffer);
String hash;
MD5 md5 = new MD5(buffer);
md5.Update(buffer);
byte[] resultado = md5.Final();
hash = MD5.asHex(resultado);
return hash;
}
Na versão para J2SE (a original), para fazer o MD5 fica assim:
J2SE
private String geraHash(File novoArquivo) throws IOException {
String hash;
hash = MD5.asHex(MD5.getHash(novoArquivo));
return hash;
}
Na classe J2ME lá não tem o método getHash().
A implementação em J2ME eu peguei de um exemplo que outro cara fez para converter text (string), e modifiquei para enviar o buffer de bytes.
Para um mesmo arquivo (somente em pasta diferente) esta retornando um valor para o hash em J2ME e outro para o em J2SE.
Exemplo:
arquivo algo.txt no cliente J2Me
f3dfe88e2b6690bd22b4a9fc6a423b3d
arquivo algo.txt no servidor J2SE
c5fd644c784d91511124cfcd2e69d7b2
No J2SE, para arquivos iguais, aonde muda somente o nome, o hash retorna igual.
No J2ME, para arquivos iguais, aonde muda somente o nome, o hash retorna diferente para cada um deles.
o que estou fazendo de errado?