在Haskell中计算文件的MD5摘要

10

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

3个回答

7

一种选择是使用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

3

现在应该使用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。)

2

另一个选择是使用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接