SHA
Usage is very straightforward:
julia> using SHA julia> 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.txt test julia> using SHA julia> open("/tmp/test.txt") do f sha2_256(f) end 32-element Array{UInt8,1}: 0x9f 0x86 0xd0 0x81 0x88 0x4c 0x7d 0x65 ⋮ 0x5d 0x6c 0x15 0xb0 0xf0 0x0a 0x08
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 state julia> update!(ctx, b"some data") 0x0000000000000009 julia> update!(ctx, b"some more data") 0x0000000000000017 julia> digest!(ctx) 32-element Vector{UInt8}: 0xbe 0xcf 0x23 0xda 0xaf 0x02 ⋮ 0x25 0x52 0x19 0xa0 0x8b 0xc5
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.
© 2009–2021 Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
Licensed under the MIT License.
https://docs.julialang.org/en/v1.6.0/stdlib/SHA/