SHA
SHA 函式
使用方式非常簡單
julia> using SHA
julia> bytes2hex(sha256("test"))
"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
每個匯出的函式 (在撰寫本文時,已實作 SHA-1、SHA-2 224、256、384 和 512,以及 SHA-3 224、256、384 和 512 函式) 會接收 AbstractVector{UInt8}
、AbstractString
或 IO
物件。這讓檢查檔案雜湊變得非常簡單
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
所有 SHA 函式
由於慣用語法中使用 sha256
來指 sha2_256
,因此提供便利函數,將 shaxxx()
函數呼叫對應到 sha2_xxx()
。對於 SHA-3,沒有此類慣用語法,使用者必須使用完整的 sha3_xxx()
名稱。
shaxxx()
接受 AbstractString
和陣列類似物件 (NTuple
和 Array
),其元素類型為 UInt8
。
SHA-1
SHA.sha1
— 函數sha1(data)
使用 sha1
演算法雜湊資料並傳回結果摘要。另請參閱 SHA1_CTX
。
sha1(io::IO)
使用 sha1
演算法從 io 雜湊資料。
SHA-2
SHA.sha224
— 函數sha224(data)
使用 sha224
演算法雜湊資料並傳回結果摘要。另請參閱 SHA2_224_CTX
。
sha224(io::IO)
使用 sha224
演算法從 io 雜湊資料。
SHA.sha256
— 函數sha256(data)
使用 sha256
演算法雜湊資料並傳回結果摘要。另請參閱 SHA2_256_CTX
。
sha256(io::IO)
使用 sha256
演算法從 io 雜湊資料。
SHA.sha384
— 函數sha384(data)
使用 sha384
演算法雜湊資料並傳回結果摘要。另請參閱 SHA2_384_CTX
。
sha384(io::IO)
使用 sha384
演算法從 io 雜湊資料。
SHA.sha512
— 函數sha512(data)
使用 sha512
演算法雜湊資料並傳回結果摘要。另請參閱 SHA2_512_CTX
。
sha512(io::IO)
使用 sha512
演算法從 io 雜湊資料。
SHA.sha2_224
— 函數sha2_224(data)
使用 sha2_224
演算法雜湊資料並傳回結果摘要。另請參閱 SHA2_224_CTX
。
sha2_224(io::IO)
使用 sha2_224
演算法從 io 雜湊資料。
SHA.sha2_256
— 函數sha2_256(data)
使用 sha2_256
演算法雜湊資料並傳回結果摘要。另請參閱 SHA2_256_CTX
。
sha2_256(io::IO)
使用 sha2_256
演算法從 io 雜湊資料。
SHA.sha2_384
— 函數sha2_384(data)
使用 sha2_384
演算法雜湊資料並傳回結果摘要。另請參閱 SHA2_384_CTX
。
sha2_384(io::IO)
使用 sha2_384
演算法從 io 雜湊資料。
SHA.sha2_512
— 函數sha2_512(data)
使用 sha2_512
演算法雜湊資料並傳回結果摘要。另請參閱 SHA2_512_CTX
。
sha2_512(io::IO)
使用 sha2_512
演算法從 io 雜湊資料。
SHA-3
SHA.sha3_224
— 函數sha3_224(data)
使用 sha3_224
演算法雜湊資料並傳回結果摘要。另請參閱 SHA3_224_CTX
。
sha3_224(io::IO)
使用 sha3_224
演算法從 io 雜湊資料。
SHA.sha3_256
— 函數sha3_256(data)
使用 sha3_256
演算法雜湊資料並傳回結果摘要。另請參閱 SHA3_256_CTX
。
sha3_256(io::IO)
使用 sha3_256
演算法對 io 中的資料進行雜湊。
SHA.sha3_384
— 函式sha3_384(data)
使用 sha3_384
演算法對資料進行雜湊,並傳回產生的摘要。另請參閱 SHA3_384_CTX
。
sha3_384(io::IO)
使用 sha3_384
演算法對 io 中的資料進行雜湊。
SHA.sha3_512
— 函式sha3_512(data)
使用 sha3_512
演算法對資料進行雜湊,並傳回產生的摘要。另請參閱 SHA3_512_CTX
。
sha3_512(io::IO)
使用 sha3_512
演算法對 io 中的資料進行雜湊。
使用內容
若要從多個項目建立雜湊,可以使用 SHAX_XXX_CTX()
類型建立狀態雜湊物件,並使用 update!
更新,並使用 digest!
完成。
julia> using SHA
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
0xf7
0xa3
0x57
0x92
⋮
0x89
0x4f
0x59
0xd8
0xb3
0xb4
0x81
0x8b
0xc5
請注意,在撰寫本文時,SHA3 程式碼尚未最佳化,因此執行速度大約比 SHA2 慢一個數量級。
SHA.update!
— 函式update!(context, data[, datalen])
使用資料中的位元組更新 SHA 內容。另請參閱 digest!
以完成雜湊。
範例
julia> ctx = SHA1_CTX()
SHA1 hash state
julia> update!(ctx, b"data to to be hashed")
SHA.digest!
— 函式digest!(context)
完成 SHA 內容,並傳回雜湊作為位元組陣列 (Array{Uint8, 1})。
範例
julia> ctx = SHA1_CTX()
SHA1 hash state
julia> update!(ctx, b"data to to be hashed")
julia> digest!(ctx)
20-element Array{UInt8,1}:
0x83
0xe4
⋮
0x89
0xf5
所有 SHA 內容類型
SHA-1
SHA.SHA1_CTX
— 類型SHA1_CTX()
建構一個空的 SHA1 內容。
SHA-2
也提供便利類型,其中 SHAXXX_CTX
是 SHA2_XXX_CTX
的類型別名。
SHA.SHA224_CTX
— 類型SHA2_224_CTX()
建構一個空的 SHA2_224 內容。
SHA.SHA256_CTX
— 類型SHA2_256_CTX()
建構一個空的 SHA2_256 內容。
SHA.SHA384_CTX
— 類型SHA2_384()
建構一個空的 SHA2_384 內容。
SHA.SHA512_CTX
— 類型SHA2_512_CTX()
建構一個空的 SHA2_512 內容。
SHA.SHA2_224_CTX
— 類型SHA2_224_CTX()
建構一個空的 SHA2_224 內容。
SHA.SHA2_256_CTX
— 類型SHA2_256_CTX()
建構一個空的 SHA2_256 內容。
SHA.SHA2_384_CTX
— 類型SHA2_384()
建構一個空的 SHA2_384 內容。
SHA.SHA2_512_CTX
— 類型SHA2_512_CTX()
建構一個空的 SHA2_512 內容。
SHA-3
SHA.SHA3_224_CTX
— 類型SHA3_224_CTX()
建構一個空的 SHA3_224 內容。
SHA.SHA3_256_CTX
— 類型SHA3_256_CTX()
建構一個空的 SHA3_256 內容。
SHA.SHA3_384_CTX
— 類型SHA3_384_CTX()
建構一個空的 SHA3_384 內容。
SHA.SHA3_512_CTX
— 類型SHA3_512_CTX()
建構一個空的 SHA3_512 內容。
HMAC 函數
julia> using SHA
julia> key = collect(codeunits("key_string"))
10-element Vector{UInt8}:
0x6b
0x65
0x79
0x5f
0x73
0x74
0x72
0x69
0x6e
0x67
julia> bytes2hex(hmac_sha3_256(key, "test-message"))
"bc49a6f2aa29b27ee5ed1e944edd7f3d153e8a01535d98b5e24dac9a589a6248"
若要從多個項目建立雜湊,可以使用 HMAC_CTX()
類型來建立有狀態雜湊物件,並使用 update!
進行更新,並使用 digest!
完成。
julia> using SHA
julia> key = collect(codeunits("key_string"))
10-element Vector{UInt8}:
0x6b
0x65
0x79
0x5f
0x73
0x74
0x72
0x69
0x6e
0x67
julia> ctx = HMAC_CTX(SHA3_256_CTX(), key);
julia> update!(ctx, b"test-")
0x0000000000000000000000000000008d
julia> update!(ctx, b"message")
0x00000000000000000000000000000094
julia> bytes2hex(digest!(ctx))
"bc49a6f2aa29b27ee5ed1e944edd7f3d153e8a01535d98b5e24dac9a589a6248"
所有 HMAC 函數
HMAC 內容類型
SHA.HMAC_CTX
— 類型HMAC_CTX(ctx::CTX, key::Vector{UInt8}) where {CTX<:SHA_CTX}
建構一個空的 HMAC_CTX 內容。
SHA-1
SHA.hmac_sha1
— 函式hmac_sha1(key, data)
使用已傳遞的密鑰,使用 sha1
演算法雜湊資料。另請參閱 HMAC_CTX
。
hmac_sha1(key, io::IO)
使用 sha1
演算法,使用已傳遞的密鑰,雜湊來自 io
的資料。
SHA-2
SHA.hmac_sha224
— 函式hmac_sha224(key, data)
使用已傳遞的密鑰,使用 sha224
演算法雜湊資料。另請參閱 HMAC_CTX
。
hmac_sha224(key, io::IO)
使用 sha224
演算法,使用已傳遞的密鑰,雜湊來自 io
的資料。
SHA.hmac_sha256
— 函式hmac_sha256(key, data)
使用已傳遞的密鑰,使用 sha256
演算法雜湊資料。另請參閱 HMAC_CTX
。
hmac_sha256(key, io::IO)
使用 sha256
演算法,使用已傳遞的密鑰,雜湊來自 io
的資料。
SHA.hmac_sha384
— 函式hmac_sha384(key, data)
使用已傳遞的密鑰,使用 sha384
演算法雜湊資料。另請參閱 HMAC_CTX
。
hmac_sha384(key, io::IO)
使用 sha384
演算法,使用已傳遞的密鑰,雜湊來自 io
的資料。
SHA.hmac_sha512
— 函式hmac_sha512(key, data)
使用已傳遞的密鑰,使用 sha512
演算法雜湊資料。另請參閱 HMAC_CTX
。
hmac_sha512(key, io::IO)
使用 sha512
演算法,使用已傳遞的密鑰,雜湊來自 io
的資料。
SHA.hmac_sha2_224
— 函數hmac_sha2_224(key, data)
使用傳遞的密鑰,使用 sha2_224
演算法雜湊資料。另請參閱 HMAC_CTX
。
hmac_sha2_224(key, io::IO)
使用 sha2_224
演算法,使用傳遞的密鑰雜湊來自 io
的資料。
SHA.hmac_sha2_256
— 函數hmac_sha2_256(key, data)
使用傳遞的密鑰,使用 sha2_256
演算法雜湊資料。另請參閱 HMAC_CTX
。
hmac_sha2_256(key, io::IO)
使用 sha2_256
演算法,使用傳遞的密鑰雜湊來自 io
的資料。
SHA.hmac_sha2_384
— 函數hmac_sha2_384(key, data)
使用傳遞的密鑰,使用 sha2_384
演算法雜湊資料。另請參閱 HMAC_CTX
。
hmac_sha2_384(key, io::IO)
使用 sha2_384
演算法,使用傳遞的密鑰雜湊來自 io
的資料。
SHA.hmac_sha2_512
— 函數hmac_sha2_512(key, data)
使用傳遞的密鑰,使用 sha2_512
演算法雜湊資料。另請參閱 HMAC_CTX
。
hmac_sha2_512(key, io::IO)
使用 sha2_512
演算法,使用傳遞的密鑰雜湊來自 io
的資料。
SHA-3
SHA.hmac_sha3_224
— 函數hmac_sha3_224(key, data)
使用傳遞的密鑰,使用 sha3_224
演算法雜湊資料。另請參閱 HMAC_CTX
。
hmac_sha3_224(key, io::IO)
使用 sha3_224
演算法,使用傳遞的密鑰雜湊來自 io
的資料。
SHA.hmac_sha3_256
— 函數hmac_sha3_256(key, data)
使用已傳遞的密鑰,使用 sha3_256
演算法雜湊資料。另請參閱 HMAC_CTX
。
hmac_sha3_256(key, io::IO)
使用 sha3_256
演算法,使用已傳遞的密鑰雜湊來自 io
的資料。
SHA.hmac_sha3_384
— 函數hmac_sha3_384(key, data)
使用已傳遞的密鑰,使用 sha3_384
演算法雜湊資料。另請參閱 HMAC_CTX
。
hmac_sha3_384(key, io::IO)
使用 sha3_384
演算法,使用已傳遞的密鑰雜湊來自 io
的資料。
SHA.hmac_sha3_512
— 函數hmac_sha3_512(key, data)
使用已傳遞的密鑰,使用 sha3_512
演算法雜湊資料。另請參閱 HMAC_CTX
。
hmac_sha3_512(key, io::IO)
使用 sha3_512
演算法,使用已傳遞的密鑰雜湊來自 io
的資料。