Using Haskell, how can I compute the MD5 digest of a file without using external tools like md5sum
?
Note: This question intentionally s
Another option would be using cryptohash which is based on a C implementation and also provides other hashes algorithms like 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
One option is to use the pureMD5 package, for example if you want to compute the hash of the 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
This code prints the the same MD5 sum as md5sum foo.txt
.
If you prefer a one-liner, you can use this one (the imports are the same as above):
LB.readFile "foo.txt" >>= print . md5