SHA
SHA functions
使用は非常に簡単です:
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 Vector{UInt8}:
0x9f
0x86
0xd0
0x81
0x88
0x4c
0x7d
0x65
⋮
0x5d
0x6c
0x15
0xb0
0xf0
0x0a
0x08All SHA functions
sha256をsha2_256を指すための口語的な使用法のため、shaxxx()関数の呼び出しをsha2_xxx()にマッピングする便利な関数が提供されています。SHA-3については、そのような口語は存在せず、ユーザーは完全なsha3_xxx()の名前を使用する必要があります。
shaxxx() は AbstractString と要素が UInt8 型の配列のようなオブジェクト(NTuple と Vector)を受け取ります。
SHA-1
SHA.sha1 — Functionsha1(data)sha1アルゴリズムを使用してデータをハッシュし、結果のダイジェストを返します。詳細はSHA.SHA1_CTXを参照してください。
sha1(io::IO)sha1アルゴリズムを使用してioからデータをハッシュします。
SHA-2
SHA.sha224 — Functionsha224(data)sha224アルゴリズムを使用してデータをハッシュし、結果のダイジェストを返します。詳細はSHA.SHA2_224_CTXを参照してください。
sha224(io::IO)sha224アルゴリズムを使用してioからデータをハッシュします。
SHA.sha256 — Functionsha256(data)sha256アルゴリズムを使用してデータをハッシュし、結果のダイジェストを返します。詳細はSHA.SHA2_256_CTXを参照してください。
sha256(io::IO)sha256アルゴリズムを使用してioからデータをハッシュします。
SHA.sha384 — Functionsha384(data)sha384アルゴリズムを使用してデータをハッシュし、結果のダイジェストを返します。詳細はSHA.SHA2_384_CTXを参照してください。
sha384(io::IO)sha384アルゴリズムを使用してioからデータをハッシュします。
SHA.sha512 — Functionsha512(data)sha512アルゴリズムを使用してデータをハッシュし、結果のダイジェストを返します。詳細はSHA.SHA2_512_CTXを参照してください。
sha512(io::IO)sha512アルゴリズムを使用してioからデータをハッシュします。
SHA.sha2_224 — Functionsha2_224(data)sha2_224アルゴリズムを使用してデータをハッシュし、結果のダイジェストを返します。詳細はSHA.SHA2_224_CTXを参照してください。
sha2_224(io::IO)sha2_224アルゴリズムを使用してioからデータをハッシュします。
SHA.sha2_256 — Functionsha2_256(data)sha2_256アルゴリズムを使用してデータをハッシュし、結果のダイジェストを返します。詳細はSHA.SHA2_256_CTXを参照してください。
sha2_256(io::IO)sha2_256アルゴリズムを使用してioからデータをハッシュします。
SHA.sha2_384 — Functionsha2_384(data)sha2_384アルゴリズムを使用してデータをハッシュし、結果のダイジェストを返します。 SHA.SHA2_384_CTXも参照してください。
sha2_384(io::IO)sha2_384アルゴリズムを使用してioからデータをハッシュします。
SHA.sha2_512 — Functionsha2_512(data)sha2_512アルゴリズムを使用してデータをハッシュし、結果のダイジェストを返します。詳細はSHA.SHA2_512_CTXを参照してください。
sha2_512(io::IO)sha2_512アルゴリズムを使用してioからデータをハッシュします。
SHA.sha2_512_224 — Functionsha2_512_224(data)sha2_512_224アルゴリズムを使用してデータをハッシュし、結果のダイジェストを返します。詳細はSHA.SHA2_512_224_CTXを参照してください。
sha2_512_224(io::IO)sha2_512_224アルゴリズムを使用して、ioからデータをハッシュします。
SHA.sha2_512_256 — Functionsha2_512_256(data)sha2_512_256アルゴリズムを使用してデータをハッシュし、結果のダイジェストを返します。詳細はSHA.SHA2_512_256_CTXを参照してください。
sha2_512_256(io::IO)sha2_512_256アルゴリズムを使用して、ioからデータをハッシュします。
SHA-3
SHA.sha3_224 — Functionsha3_224(data)sha3_224アルゴリズムを使用してデータをハッシュし、結果のダイジェストを返します。詳細はSHA.SHA3_224_CTXを参照してください。
sha3_224(io::IO)sha3_224アルゴリズムを使用してioからデータをハッシュします。
SHA.sha3_256 — Functionsha3_256(data)sha3_256アルゴリズムを使用してデータをハッシュし、結果のダイジェストを返します。詳細はSHA.SHA3_256_CTXを参照してください。
sha3_256(io::IO)sha3_256アルゴリズムを使用してioからデータをハッシュします。
SHA.sha3_384 — Functionsha3_384(data)sha3_384アルゴリズムを使用してデータをハッシュし、結果のダイジェストを返します。詳細はSHA.SHA3_384_CTXを参照してください。
sha3_384(io::IO)sha3_384アルゴリズムを使用してioからデータをハッシュします。
SHA.sha3_512 — Functionsha3_512(data)sha3_512アルゴリズムを使用してデータをハッシュし、結果のダイジェストを返します。詳細はSHA.SHA3_512_CTXを参照してください。
sha3_512(io::IO)sha3_512アルゴリズムを使用してioからデータをハッシュします。
Working with context
複数のアイテムからハッシュを作成するには、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よりもおおよそ1桁遅いことに注意してください。
SHA.update! — Functionupdate!(context, data[, datalen])データ内のバイトでSHAコンテキストを更新します。ハッシュを最終化するには、digest!も参照してください。
例
julia> ctx = SHA1_CTX()
SHA1ハッシュ状態
julia> update!(ctx, b"ハッシュされるデータ")SHA.digest! — Functiondigest!(context)SHAコンテキストを最終化し、ハッシュをバイトの配列(Vector{Uint8})として返します。digest!を呼び出した後にコンテキストを更新するとエラーになります。
例
julia> ctx = SHA1_CTX()
SHA1ハッシュ状態
julia> update!(ctx, b"ハッシュされるデータ")
julia> digest!(ctx)
20要素のVector{UInt8}:
0x83
0xe4
⋮
0x89
0xf5
julia> update!(ctx, b"追加のデータ")
ERROR: `digest!`が呼び出された後にCTXを更新できません
[...]All SHA context types
SHA-1
SHA.SHA1_CTX — TypeSHA1_CTX()空のSHA1コンテキストを構築します。
SHA-2
便利なタイプも提供されており、SHAXXX_CTXはSHA2_XXX_CTXの型エイリアスです。
SHA.SHA224_CTX — TypeSHA2_224_CTX()空のSHA2_224コンテキストを構築します。
SHA.SHA256_CTX — TypeSHA2_256_CTX()空のSHA2_256コンテキストを構築します。
SHA.SHA384_CTX — TypeSHA2_384()空のSHA2_384コンテキストを構築します。
SHA.SHA512_CTX — TypeSHA2_512_CTX()空のSHA2_512コンテキストを構築します。
SHA.SHA2_224_CTX — TypeSHA2_224_CTX()空のSHA2_224コンテキストを構築します。
SHA.SHA2_256_CTX — TypeSHA2_256_CTX()空のSHA2_256コンテキストを構築します。
SHA.SHA2_384_CTX — TypeSHA2_384()空のSHA2_384コンテキストを構築します。
SHA.SHA2_512_CTX — TypeSHA2_512_CTX()空のSHA2_512コンテキストを構築します。
SHA.SHA2_512_224_CTX — TypeSHA2_512_224_CTX()空のSHA2_512/224コンテキストを構築し、初期ハッシュ値を設定します。
初期値のソースについては、FIPS 180-4, 5.3.6.1 SHA-512/224を参照してください。
SHA.SHA2_512_256_CTX — TypeSHA2_512_256_CTX()空のSHA2_512/256コンテキストを構築し、初期ハッシュ値を設定します。
初期値のソースについては、FIPS 180-4, 5.3.6.2 SHA-512/256を参照してください。
SHA-3
SHA.SHA3_224_CTX — TypeSHA3_224_CTX()空のSHA3_224コンテキストを構築します。
SHA.SHA3_256_CTX — TypeSHA3_256_CTX()空のSHA3_256コンテキストを構築します。
SHA.SHA3_384_CTX — TypeSHA3_384_CTX()空のSHA3_384コンテキストを構築します。
SHA.SHA3_512_CTX — TypeSHA3_512_CTX()空のSHA3_512コンテキストを構築します。
HMAC functions
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"All HMAC functions
HMAC コンテキストタイプ
SHA.HMAC_CTX — TypeHMAC_CTX(ctx::CTX, key::Vector{UInt8}) where {CTX<:SHA_CTX}空の HMAC_CTX コンテキストを構築します。
SHA-1
SHA.hmac_sha1 — Functionhmac_sha1(key, data)渡されたキーを使用してsha1アルゴリズムでデータをハッシュします。詳細はHMAC_CTXを参照してください。
hmac_sha1(key, io::IO)渡されたキーを使用して、ioからデータをsha1アルゴリズムでハッシュします。
SHA-2
SHA.hmac_sha224 — Functionhmac_sha224(key, data)渡されたキーを使用して sha224 アルゴリズムでデータをハッシュします。詳細は HMAC_CTX を参照してください。
hmac_sha224(key, io::IO)渡されたキーを使用して、ioからデータをハッシュ化します。sha224アルゴリズムを使用します。
SHA.hmac_sha256 — Functionhmac_sha256(key, data)渡されたキーを使用してsha256アルゴリズムでデータをハッシュします。詳細はHMAC_CTXを参照してください。
hmac_sha256(key, io::IO)渡されたキーを使用して、sha256アルゴリズムでioからデータをハッシュします。
SHA.hmac_sha384 — Functionhmac_sha384(key, data)渡されたキーを使用して sha384 アルゴリズムでデータをハッシュします。詳細は HMAC_CTX を参照してください。
hmac_sha384(key, io::IO)渡されたキーを使用して、ioからのデータをsha384アルゴリズムでハッシュします。
SHA.hmac_sha512 — Functionhmac_sha512(key, data)渡されたキーを使用して sha512 アルゴリズムでデータをハッシュします。詳細は HMAC_CTX を参照してください。
hmac_sha512(key, io::IO)渡されたキーを使用して、ioからデータをsha512アルゴリズムでハッシュします。
SHA.hmac_sha2_224 — Functionhmac_sha2_224(key, data)渡されたキーを使用して sha2_224 アルゴリズムでデータをハッシュします。詳細は HMAC_CTX を参照してください。
hmac_sha2_224(key, io::IO)渡されたキーを使用して、ioからデータをハッシュし、sha2_224アルゴリズムを使用します。
SHA.hmac_sha2_256 — Functionhmac_sha2_256(key, data)渡されたキーを使用して sha2_256 アルゴリズムでデータをハッシュします。詳細は HMAC_CTX を参照してください。
hmac_sha2_256(key, io::IO)渡されたキーを使用して、ioからデータをsha2_256アルゴリズムでハッシュします。
SHA.hmac_sha2_384 — Functionhmac_sha2_384(key, data)渡されたキーを使用してsha2_384アルゴリズムでデータをハッシュします。詳細はHMAC_CTXを参照してください。
hmac_sha2_384(key, io::IO)渡されたキーを使用して、ioからデータをハッシュ化します。sha2_384アルゴリズムを使用します。
SHA.hmac_sha2_512 — Functionhmac_sha2_512(key, data)渡されたキーを使用してsha2_512アルゴリズムでデータをハッシュします。詳細はHMAC_CTXを参照してください。
hmac_sha2_512(key, io::IO)渡されたキーを使用して、ioからデータをハッシュ化します。sha2_512アルゴリズムを使用します。
SHA-3
SHA.hmac_sha3_224 — Functionhmac_sha3_224(key, data)渡されたキーを使用して sha3_224 アルゴリズムでデータをハッシュします。詳細は HMAC_CTX を参照してください。
hmac_sha3_224(key, io::IO)渡されたキーを使用して、ioからデータをハッシュし、sha3_224アルゴリズムを使用します。
SHA.hmac_sha3_256 — Functionhmac_sha3_256(key, data)渡されたキーを使用して sha3_256 アルゴリズムでデータをハッシュします。詳細は HMAC_CTX を参照してください。
hmac_sha3_256(key, io::IO)渡されたキーを使用して、ioからデータをsha3_256アルゴリズムでハッシュします。
SHA.hmac_sha3_384 — Functionhmac_sha3_384(key, data)渡されたキーを使用して sha3_384 アルゴリズムでデータをハッシュします。詳細は HMAC_CTX を参照してください。
hmac_sha3_384(key, io::IO)渡されたキーを使用して、ioからデータをsha3_384アルゴリズムでハッシュします。
SHA.hmac_sha3_512 — Functionhmac_sha3_512(key, data)渡されたキーを使用して sha3_512 アルゴリズムでデータをハッシュします。詳細は HMAC_CTX を参照してください。
hmac_sha3_512(key, io::IO)渡されたキーを使用して、ioからデータをハッシュし、sha3_512アルゴリズムを使用します。