Os cálculos realizados por ambos os algoritmos de hash são diferentes, portanto não é surpreendente que eles tenham características de desempenho diferentes. Nos sistemas Linux, md5sum
e cksum
são geralmente as versões GNU coreutils
. md5sum
usa as funções MD5 da biblioteca C que são muito bem otimizadas e operam no conteúdo do bloco 32 bits por vez (consulte md5.c
e md5-block.c
). cksum
usa sua própria implementação CRC que opera no conteúdo um byte de cada vez (veja cksum.c
). Isso pode ser um fator que contribui para a velocidade de md5sum
em comparação com cksum
; não há dúvida de que outros.
Para decidir qual ferramenta é mais apropriada para encontrar erros aleatórios, você precisa analisar as propriedades matemáticas dos algoritmos envolvidos. Em um nível muito básico, cksum
produz um hash de 32 bits, enquanto md5sum
produz um hash de 128 bits, de modo que o último deve ser mais resistente a colisões acidentais (e, portanto, melhor detectar erros aleatórios, especialmente à medida que o número de bits invertidos aumenta).
A única razão pela qual eu vejo para escolher cksum
over md5sum
é que o primeiro é especificado por POSIX, então qualquer sistema POSIX o terá - se isso for um fator então cksum
seria mais apropriado.
(Quanto ao seu comentário sobre hashes criptográficos, cksum
não é um hash criptográfico, então a questão é discutível.)