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}AbstractStringIO 物件。這讓檢查檔案雜湊變得非常簡單

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 和陣列類似物件 (NTupleArray),其元素類型為 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_CTXSHA2_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-3

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 的資料。