计算 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
。)
使用 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
。)