Pergunta

Eu estou tentando garantir a integridade de um arquivo após o download. Eu armazenar o MD5 do arquivo no banco de dados e comparar isso MD5 para o arquivo após o download. No entanto, eu sempre obter resultados diferentes MD5 quando eu botar o arquivo após o download. Eu estou querendo saber se a matriz de bytes que está sendo hash contém os dados de meta como modificada pela última vez e está jogando fora do hash. Se alguém já fez isso antes, sua ajuda seria muito apreciada.

Foi útil?

Solução

O hash MD5 é calculado sobre o conteúdo do arquivo, e não é afetado por metadados do documento. É um processo determinista que sempre produzem o mesmo resultado, se você começar com o mesmo conteúdo (embora, existem maneiras de falsificar uma assinatura MD5 devido a colisão).

Como você está criando o hash MD5 para o arquivo? Você já tentou usar outra ferramenta para reproduzir o problema?

Se houver uma assinatura MD5 diferente, então os seus arquivos são diferente de alguma forma.

As sugestões anteriores de caracteres de fim de linha, ou a transferência de um arquivo binário em modo ASCII são razões muito provavelmente por isso que os arquivos podem ser alterados. Usando um href="http://winmerge.org/" rel="nofollow noreferrer"> ferramenta pode ajudar a identificar onde / como os arquivos são diferentes. Se o arquivo está no formato binário, tente usar um binário diff ferramenta .

Outras dicas

Uma maneira simples de descobrir: executar um diff (presumo binário, mas talvez não) contra dois downloads diferentes. Isso deve rapidamente identificar o problema.

Se im não totalmente errado aqui o hash MD5 só trabalhando nos dados reais e não as marcas de tempo e outros metadados. Talvez você está transferindo arquivos-texto com ftp, nesse caso, o FtpClient pode reescrever os caracteres de nova linha para ajustar seu sistema e, em seguida, o hash será diffrent

Se você estiver usando FTP para download, o problema poderia ser:

  • opção de download binário em vez de ASCII (ou vice-versa).

  • Transferir em todas as plataformas, por exemplo Windows para Unix onde a EOL é tratada diferente.

Você pode testar a sua teoria em apenas hash contra uma parte específica do arquivo ... Say, o meio 50% ... Se isso é diferente, então você sabe que não é apenas um timestamp ou algo assim ... Dito isto, você realmente precisa nos dar mais informações para obter uma resposta melhor ...

Certifique-se de que você está realmente calcular o MD5 sobre os bytes do arquivo, e não o nome do arquivo ou algum outro texto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top