2012-04-01

F#  Common Hash Functions

TODO:  at the moment it didn't work well with streams.


module HashSum =
    open System
    open System.IO
    open System.Security.Cryptography
    open System.Text


    let encode (s: string) = UTF8Encoding().GetBytes(s)


    let toHexDigit n =
        if n < 10uy then char (n + 0x30uy)
        else char (n + 0x37uy)


    let toHex b =
        let strArr =
            [|for n in b do
                  let ln = (n &&& 0xF0uy) >>> 4
                  let rn =  n &&& 0x0Fuy
                  yield ln |> toHexDigit
                  yield rn |> toHexDigit|]
        new String(strArr)


    let md5sum s =            
        use hashProvider = new MD5CryptoServiceProvider()
        let hash = hashProvider.ComputeHash(encode s)
        hash |> toHex


    let sha1sum s =
        use hashProvider = new SHA1CryptoServiceProvider()
        let hash = hashProvider.ComputeHash(encode s)
        hash |> toHex


    let sha256sum s =
        use hashProvider = new SHA256Managed()
        let hash = hashProvider.ComputeHash(encode s)
        hash |> toHex


    let sha512sum s =
        use hashProvider = new SHA512Managed()
        let hash = hashProvider.ComputeHash(encode s)
        hash |> toHex




open System
open HashSum 
Console.WriteLine(md5sum "Hello World")
Console.WriteLine(sha1sum "Hello World")
Console.WriteLine(sha256sum "Hello World")
Console.WriteLine(sha512sum "Hello World")

No comments:

Post a Comment

Sway - as a snap reaches alpha state