SHA
用法非常直接:
julia> using SHAjulia> bytes2hex(sha256("test"))"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
Each exported function (at the time of this writing, SHA-1, SHA-2 224, 256, 384 and 512, and SHA-3 224, 256, 384 and 512 functions are implemented) takes in either an AbstractVector{UInt8}, an AbstractString or an IO object. This makes it trivial to checksum a file:
shell> cat /tmp/test.txttestjulia> using SHAjulia> open("/tmp/test.txt") do fsha2_256(f)end32-element Array{UInt8,1}:0x9f0x860xd00x810x880x4c0x7d0x65⋮0x5d0x6c0x150xb00xf00x0a0x08
Due to the colloquial usage of sha256 to refer to sha2_256, convenience functions are provided, mapping shaxxx() function calls to sha2_xxx(). For SHA-3, no such colloquialisms exist and the user must use the full sha3_xxx() names.
shaxxx() takes AbstractString and array-like objects (NTuple and Array) with elements of type UInt8.
To create a hash from multiple items the SHAX_XXX_CTX() types can be used to create a stateful hash object that
is updated with update! and finalized with digest!
julia> ctx = SHA2_256_CTX()SHA2 256-bit hash statejulia> update!(ctx, b"some data")0x0000000000000009julia> update!(ctx, b"some more data")0x0000000000000017julia> digest!(ctx)32-element Vector{UInt8}:0xbe0xcf0x230xda0xaf0x02⋮0x250x520x190xa00x8b0xc5
Note that, at the time of this writing, the SHA3 code is not optimized, and as such is roughly an order of magnitude slower than SHA2.
