Segunda-feira, 23 Julho 2007

Como usar openssl e md5sum para verificar integridade de arquivos

Kernel Panic

Sempre preciso copiar arquivos entre solaris, linux e windows. Para verificar se o arquivo foi copiado com sucesso, uso um algoritmo aplicado no arquivo que faço a cópia, que efetua um cálculo único. Esse algoritmo é o MD5. Para invocar o cálculo desse algoritmo uso uma ferramenta no linux chamado md5sum.

Essa ferramenta, efetua o cálculo e a verificação de integridade de um arquivo.

Por que usar verificação de integridade na cópia de arquivos ?
Pois a cópia pode ter sido corrompida na transferência.

Então segue um exemplo de usar o md5sum

Criar o hash

md5sum arquivo.tar > arquivo.tar.md5

Verificar o hash

md5sum -c arquivo.tar.md5

A verificação do hash, usa o seguinte formato para verificação

534a15536aa0152e178361983c678cc0  arquivo.tar.md5

O motivo desta dica, não é necessariamente sobre o md5sum, mas porque essa ferramenta não está disponível nativamente no solaris, onde uso o openssl.

No solaris, para criar o hash, uso openssl da seguinte maneira

openssl dgst -md5 <arquivo>

Que gera um resultado da seguinte maneira

$ openssl dgst -md5 list.conf
MD5(list.conf)= e5c8ebe8e2113448fd318328cf5ca582

Que é diferente do md5sum, então não é possível realizar a verificação de integridade usando checksums md5.

Por isso criei um script bash, para solaris que faz uma tarefa semelhante do utilitário md5sum.

Download do script bash md5sum_solaris.sh

Dependências: openssl, awk, sed

O código é o seguinte:

#!/bin/bash

if [ "$1" ] ; then
    if [ $1 = '-c' ] && [ $2"x" != 'x'  ] ; then
        shift
        cat $1 | while read hash_line
        do
            hash_value=`echo $hash_line | awk '{print $1}'`
            filename=`echo $hash_line | awk '{print $2}'`
            echo -n $filename": "
            if [ -f "$filename" ] ; then
                hash_var=`openssl dgst -md5 $filename | awk '{print $2}'` ;
                if [ $hash_var == $hash_value ] ; then
                    echo "OK"
                else
                    echo "FAILED"
                fi
            else
                echo "FAILED: No such file or directory"
            fi
        done
    else
        openssl dgst -md5 $*  |  sed 's/[\(\)=]//g;s/MD5//g' | awk '{print $2"  "$1}'
    fi
else 
    echo "Usage:
    $0 -c hashs.md5      to verify checksums
    $0             to create checksums
    "
fi

Escrito por claudio at 3:56 AM categorizado por Dicas e Scripts

Tags: linux dicas

 

[Trackback URL desta mensagem]

Escreva um comentário:

(not displayed)
 
 
 

Previsão de formatação:

 
 
     Navegue no histórico de mensagens: « First  « Prev   1 2 3 4 5   Next »  Last »