2015-05-29 13 views
5

Utilizzando Haskell, come posso calcolare il digest MD5 di un file senza utilizzare strumenti esterni come md5sum?Compute MD5 digest di file in Haskell

Nota: Questa domanda non mostra intenzionalmente nessuno sforzo come ho risposto subito.

risposta

3

Una possibilità è quella di utilizzare il pacchetto pureMD5, per esempio se si vuole calcolare l'hash del file foo.txt:

import qualified Data.ByteString.Lazy as LB 
import Data.Digest.Pure.MD5 

main :: IO() 
main = do 
    fileContent <- LB.readFile "foo.txt" 
    let md5Digest = md5 fileContent 
    print md5Digest 

Questo codice stampa la stessa somma MD5 come md5sum foo.txt.

Se si preferisce un one-liner, è possibile utilizzare questo (le importazioni sono le stesse come sopra):

LB.readFile "foo.txt" >>= print . md5 
1

Un'altra opzione sarebbe utilizzando cryptohash che si basa su un'implementazione C e fornisce anche altri algoritmi di hash come SHA1:

import qualified Data.ByteString.Lazy as LB 
import Crypto.Hash 

md5 :: LB.ByteString -> Digest MD5 
md5 = hashlazy 

main :: IO() 
main = do 
    fileContent <- LB.readFile "foo.txt" 
    let md5Digest = md5 fileContent 
    print $ digestToHexByteString md5Digest