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 Array{UInt8,1}:
 0x9f
 0x86
 0xd0
 0x81
 0x88
 0x4c
 0x7d
 0x65
    ⋮
 0x5d
 0x6c
 0x15
 0xb0
 0xf0
 0x0a
 0x08

All SHA functions

sha256sha2_256을 지칭하는 구어체 사용으로 인해, shaxxx() 함수 호출을 sha2_xxx()로 매핑하는 편의 함수가 제공됩니다. SHA-3의 경우, 이러한 구어체는 존재하지 않으며 사용자는 전체 sha3_xxx() 이름을 사용해야 합니다.

shaxxx()AbstractStringUInt8 타입의 요소를 가진 배열과 유사한 객체(NTupleArray)를 입력으로 받습니다.

SHA-1

SHA.sha1Function
sha1(data)

sha1 알고리즘을 사용하여 데이터를 해시하고 결과 다이제스트를 반환합니다. 또한 SHA1_CTX를 참조하십시오.

source
sha1(io::IO)

sha1 알고리즘을 사용하여 io에서 데이터를 해시합니다.

source

SHA-2

SHA.sha224Function
sha224(data)

sha224 알고리즘을 사용하여 데이터를 해시하고 결과 다이제스트를 반환합니다. 또한 SHA2_224_CTX를 참조하십시오.

source
sha224(io::IO)

sha224 알고리즘을 사용하여 io에서 데이터를 해시합니다.

source
SHA.sha256Function
sha256(data)

sha256 알고리즘을 사용하여 데이터를 해시하고 결과 다이제스트를 반환합니다. 또한 SHA2_256_CTX를 참조하십시오.

source
sha256(io::IO)

sha256 알고리즘을 사용하여 io에서 데이터를 해시합니다.

source
SHA.sha384Function
sha384(data)

sha384 알고리즘을 사용하여 데이터를 해시하고 결과 다이제스트를 반환합니다. 또한 SHA2_384_CTX를 참조하십시오.

source
sha384(io::IO)

sha384 알고리즘을 사용하여 io에서 데이터를 해시합니다.

source
SHA.sha512Function
sha512(data)

sha512 알고리즘을 사용하여 데이터를 해시하고 결과 다이제스트를 반환합니다. 또한 SHA2_512_CTX를 참조하십시오.

source
sha512(io::IO)

sha512 알고리즘을 사용하여 io에서 데이터를 해시합니다.

source
SHA.sha2_224Function
sha2_224(data)

sha2_224 알고리즘을 사용하여 데이터를 해시하고 결과 다이제스트를 반환합니다. 또한 SHA2_224_CTX를 참조하십시오.

source
sha2_224(io::IO)

sha2_224 알고리즘을 사용하여 io에서 데이터를 해시합니다.

source
SHA.sha2_256Function
sha2_256(data)

sha2_256 알고리즘을 사용하여 데이터를 해시하고 결과 다이제스트를 반환합니다. SHA2_256_CTX도 참조하십시오.

source
sha2_256(io::IO)

sha2_256 알고리즘을 사용하여 io에서 데이터를 해시합니다.

source
SHA.sha2_384Function
sha2_384(data)

sha2_384 알고리즘을 사용하여 데이터를 해시하고 결과 다이제스트를 반환합니다. 또한 SHA2_384_CTX를 참조하십시오.

source
sha2_384(io::IO)

sha2_384 알고리즘을 사용하여 io에서 데이터를 해시합니다.

source
SHA.sha2_512Function
sha2_512(data)

sha2_512 알고리즘을 사용하여 데이터를 해시하고 결과 다이제스트를 반환합니다. 또한 SHA2_512_CTX를 참조하십시오.

source
sha2_512(io::IO)

sha2_512 알고리즘을 사용하여 io에서 데이터를 해시합니다.

source

SHA-3

SHA.sha3_224Function
sha3_224(data)

sha3_224 알고리즘을 사용하여 데이터를 해시하고 결과 다이제스트를 반환합니다. 또한 SHA3_224_CTX를 참조하십시오.

source
sha3_224(io::IO)

sha3_224 알고리즘을 사용하여 io에서 데이터를 해시합니다.

source
SHA.sha3_256Function
sha3_256(data)

sha3_256 알고리즘을 사용하여 데이터를 해시하고 결과 다이제스트를 반환합니다. 또한 SHA3_256_CTX를 참조하십시오.

source
sha3_256(io::IO)

sha3_256 알고리즘을 사용하여 io에서 데이터를 해시합니다.

source
SHA.sha3_384Function
sha3_384(data)

sha3_384 알고리즘을 사용하여 데이터를 해시하고 결과 다이제스트를 반환합니다. 또한 SHA3_384_CTX를 참조하십시오.

source
sha3_384(io::IO)

sha3_384 알고리즘을 사용하여 io에서 데이터를 해시합니다.

source
SHA.sha3_512Function
sha3_512(data)

sha3_512 알고리즘을 사용하여 데이터를 해시하고 결과 다이제스트를 반환합니다. 또한 SHA3_512_CTX를 참조하십시오.

source
sha3_512(io::IO)

sha3_512 알고리즘을 사용하여 io에서 데이터를 해시합니다.

source

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보다 대략 10배 느립니다.

SHA.update!Function
update!(context, data[, datalen])

SHA 컨텍스트를 데이터의 바이트로 업데이트합니다. 해시를 최종화하는 방법에 대해서는 digest!를 참조하세요.

예제

julia> ctx = SHA1_CTX()
SHA1 해시 상태

julia> update!(ctx, b"해시할 데이터")
source
SHA.digest!Function
digest!(context)

SHA 컨텍스트를 최종화하고 해시를 바이트 배열(Array{Uint8, 1})로 반환합니다. digest!를 호출한 후에 컨텍스트를 업데이트하면 오류가 발생합니다.

예제

julia> ctx = SHA1_CTX()
SHA1 해시 상태

julia> update!(ctx, b"해시할 데이터")

julia> digest!(ctx)
20-element Array{UInt8,1}:
 0x83
 0xe4
 ⋮
 0x89
 0xf5

julia> update!(ctx, b"추가 데이터")
ERROR: `digest!`가 호출된 후 CTX를 업데이트할 수 없습니다
[...]
source

All SHA context types

SHA-1

SHA-2

편의 유형도 제공되며, 여기서 SHAXXX_CTXSHA2_XXX_CTX의 유형 별칭입니다.

SHA-3

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_CTXType
HMAC_CTX(ctx::CTX, key::Vector{UInt8}) where {CTX<:SHA_CTX}

빈 HMAC_CTX 컨텍스트를 생성합니다.

source

SHA-1

SHA.hmac_sha1Function
hmac_sha1(key, data)

전달된 키를 사용하여 sha1 알고리즘으로 데이터를 해시합니다. 또한 HMAC_CTX를 참조하십시오.

source
hmac_sha1(key, io::IO)

전달된 키를 사용하여 sha1 알고리즘으로 io의 데이터를 해시합니다.

source

SHA-2

SHA.hmac_sha224Function
hmac_sha224(key, data)

전달된 키를 사용하여 sha224 알고리즘으로 데이터를 해시합니다. 또한 HMAC_CTX를 참조하십시오.

source
hmac_sha224(key, io::IO)

전달된 키를 사용하여 sha224 알고리즘으로 io의 데이터를 해시합니다.

source
SHA.hmac_sha256Function
hmac_sha256(key, data)

전달된 키를 사용하여 sha256 알고리즘으로 데이터를 해시합니다. 또한 HMAC_CTX를 참조하십시오.

source
hmac_sha256(key, io::IO)

전달된 키를 사용하여 sha256 알고리즘으로 io의 데이터를 해시합니다.

source
SHA.hmac_sha384Function
hmac_sha384(key, data)

전달된 키를 사용하여 sha384 알고리즘으로 데이터를 해시합니다. 또한 HMAC_CTX를 참조하십시오.

source
hmac_sha384(key, io::IO)

전달된 키를 사용하여 sha384 알고리즘으로 io의 데이터를 해시합니다.

source
SHA.hmac_sha512Function
hmac_sha512(key, data)

전달된 키를 사용하여 sha512 알고리즘으로 데이터를 해시합니다. 또한 HMAC_CTX를 참조하십시오.

source
hmac_sha512(key, io::IO)

전달된 키를 사용하여 sha512 알고리즘으로 io의 데이터를 해시합니다.

source
SHA.hmac_sha2_224Function
hmac_sha2_224(key, data)

전달된 키를 사용하여 sha2_224 알고리즘으로 데이터를 해시합니다. 또한 HMAC_CTX를 참조하십시오.

source
hmac_sha2_224(key, io::IO)

전달된 키를 사용하여 sha2_224 알고리즘으로 io의 데이터를 해시합니다.

source
SHA.hmac_sha2_256Function
hmac_sha2_256(key, data)

전달된 키를 사용하여 sha2_256 알고리즘으로 데이터를 해시합니다. 또한 HMAC_CTX를 참조하십시오.

source
hmac_sha2_256(key, io::IO)

전달된 키를 사용하여 sha2_256 알고리즘으로 io의 데이터를 해시합니다.

source
SHA.hmac_sha2_384Function
hmac_sha2_384(key, data)

전달된 키를 사용하여 sha2_384 알고리즘으로 데이터를 해시합니다. 또한 HMAC_CTX를 참조하십시오.

source
hmac_sha2_384(key, io::IO)

전달된 키를 사용하여 sha2_384 알고리즘으로 io의 데이터를 해시합니다.

source
SHA.hmac_sha2_512Function
hmac_sha2_512(key, data)

전달된 키를 사용하여 sha2_512 알고리즘으로 데이터를 해시합니다. 또한 HMAC_CTX를 참조하십시오.

source
hmac_sha2_512(key, io::IO)

전달된 키를 사용하여 sha2_512 알고리즘으로 io의 데이터를 해시합니다.

source

SHA-3

SHA.hmac_sha3_224Function
hmac_sha3_224(key, data)

전달된 키를 사용하여 sha3_224 알고리즘으로 데이터를 해시합니다. 또한 HMAC_CTX를 참조하십시오.

source
hmac_sha3_224(key, io::IO)

전달된 키를 사용하여 sha3_224 알고리즘으로 io의 데이터를 해시합니다.

source
SHA.hmac_sha3_256Function
hmac_sha3_256(key, data)

전달된 키를 사용하여 sha3_256 알고리즘으로 데이터를 해시합니다. 또한 HMAC_CTX를 참조하십시오.

source
hmac_sha3_256(key, io::IO)

전달된 키를 사용하여 sha3_256 알고리즘으로 io의 데이터를 해시합니다.

source
SHA.hmac_sha3_384Function
hmac_sha3_384(key, data)

전달된 키를 사용하여 sha3_384 알고리즘으로 데이터를 해시합니다. 또한 HMAC_CTX를 참조하십시오.

source
hmac_sha3_384(key, io::IO)

전달된 키를 사용하여 sha3_384 알고리즘으로 io의 데이터를 해시합니다.

source
SHA.hmac_sha3_512Function
hmac_sha3_512(key, data)

전달된 키를 사용하여 sha3_512 알고리즘으로 데이터를 해시합니다. 또한 HMAC_CTX를 참조하십시오.

source
hmac_sha3_512(key, io::IO)

전달된 키를 사용하여 sha3_512 알고리즘으로 io의 데이터를 해시합니다.

source