【问题标题】:Compute MD5 digest of file in Haskell在 Haskell 中计算文件的 MD5 摘要
【发布时间】:2022-03-10 00:46:45
【问题描述】:

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

【问题讨论】:

    标签: haskell md5


    【解决方案1】:

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

    如果你更喜欢one-liner,你可以使用这个(导入同上):

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

    【讨论】:

      【解决方案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
      

      【讨论】:

        【解决方案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
        

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

        【讨论】:

          猜你喜欢
          • 2013-05-18
          • 2011-12-11
          • 2015-01-26
          • 2010-12-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多