Gere o mesmo MD5 usando javascript e PHP

Eu estou tentando construir um aplicativo que precisa comparar o hash MD5 de qualquer arquivo. Devido a problemas específicos, antes do upload, o MD5 deve ser gerado no lado do cliente e, após o upload, o aplicativo precisa verificar o lado do servidor.

Minha primeira abordagem foi usar, no lado do cliente, a API de arquivo JavaScript eFileReader.ReadAs funções. Então eu uso o algoritmo MD5 encontrado aqui:http://pajhome.org.uk/crypt/md5/

Lado do servidor, eu usaria PHP'sfopen comando e omd5 função.

Essa abordagem funciona bem ao usar arquivos de texto simples. Mas, quando um arquivo binário é usado (como alguns jpg ou pdf), o MD5 gerado no lado do cliente é diferente do servidor. Usandomd5sum ferramenta de linha de comando Eu descobri que o servidor MD5 está correto e o problema ocorre no lado do cliente.

Eu tentei outra API MD5 que encontrei com os mesmos resultados. Eu suspeito queFileReader.ReadAs funções estão carregando o conteúdo do arquivo de forma ligeiramente diferente (tenteiReadAs variantes de função: texto, binário e assim por diante), mas não consigo descobrir qual é a diferença.

Eu estou faltando alguma coisa, mas não sei o que, talvez eu precise decodificar o conteúdo de alguma forma antes de gerar o MD5.

Alguma dica?

Editar 1:

Eu segui a ideia dada por optima1. Tomou cada personagem e imprimiu o número unicode tanto em javascript quanto em PHP. Eu podia ver apenas uma diferença no final em todos os casos (usado vimdiff).

PHP: 54 51 10 37 37 69 79 70 0

Javascript: 54 51 10 37 37 69 79 70

Talvez este zero extra no PHP seja algum tipo de "string end". Em ambos os casos, as cadeias binárias têm o mesmo tamanho. Adicionar um String.fromCharCode (0) ao final do conteúdo JS não resolve o problema. Eu continuarei investigando.

Se eu não conseguir encontrar uma solução, tentarei construir uma string gigante, concatenando esses códigos de caracteres e usando-os para construir o MD5. É uma solução de porcaria, mas servirá por agora e só preciso adicionar um zero ao final da string JS ...

Editar 2:

Graças a Deus! Esta implementação funciona como um encanto:http://www.myersdaily.org/joseph/javascript/md5.js

Se você precisa gerar um hash MD5 a partir de arquivos binários, vá em frente.

Desde já, obrigado!

questionAnswers(2)

yourAnswerToTheQuestion