使用 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
现在应该使用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
MD5
,例如 SHA256
。)另一个选择是使用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