计算 Haskell 中文件的 MD5 摘要

Compute MD5 digest of file in Haskell

使用 Haskell,我如何在不使用 md5sum 等外部工具的情况下计算文件的 MD5 摘要?

一个选项是使用 pureMD5 包,例如,如果你想计算文件的哈希值 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

此代码打印与 md5sum foo.txt 相同的 MD5 总和。

如果你更喜欢单线,你可以使用这个(进口同上):

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

另一种选择是使用 cryptohash,它基于 C 实现,还提供其他哈希算法,如 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

你现在应该使用 cryptonite:

import System.Environment
import Crypto.Hash
import qualified Data.ByteString.Lazy as L

main = do
  content <- L.readFile "foo.txt"

  let digest = hashlazy content :: Digest MD5

  putStrLn $ show digest

(您实际上可以用 cryptonite 支持的任何哈希算法替换 MD5,例如 SHA256。)