SHA

SHA functions

Die Verwendung ist sehr unkompliziert:

julia> using SHA

julia> bytes2hex(sha256("test"))
"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"

Jede exportierte Funktion (zum Zeitpunkt dieses Schreibens sind die Funktionen SHA-1, SHA-2 224, 256, 384 und 512 sowie SHA-3 224, 256, 384 und 512 implementiert) nimmt entweder ein AbstractVector{UInt8}, ein AbstractString oder ein IO-Objekt entgegen. Dies macht es trivial, eine Prüfziffer für eine Datei zu berechnen:

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

Aufgrund der umgangssprachlichen Verwendung von sha256, um sich auf sha2_256 zu beziehen, werden Hilfsfunktionen bereitgestellt, die shaxxx()-Funktionsaufrufe auf sha2_xxx() abbilden. Für SHA-3 existieren keine solchen umgangssprachlichen Begriffe, und der Benutzer muss die vollständigen sha3_xxx()-Namen verwenden.

shaxxx() nimmt AbstractString und array-ähnliche Objekte (NTuple und Array) mit Elementen vom Typ UInt8.

SHA-1

SHA.sha1Function
sha1(data)

Hash-Daten mit dem sha1-Algorithmus und geben Sie den resultierenden Hash-Wert zurück. Siehe auch SHA1_CTX.

source
sha1(io::IO)

Hash-Daten von io mit dem sha1-Algorithmus.

source

SHA-2

SHA.sha224Function
sha224(data)

Hash-Daten mit dem sha224-Algorithmus und geben Sie den resultierenden Hashwert zurück. Siehe auch SHA2_224_CTX.

source
sha224(io::IO)

Hash-Daten von io mit dem sha224-Algorithmus.

source
SHA.sha256Function
sha256(data)

Hash-Daten mit dem sha256-Algorithmus und geben Sie den resultierenden Hashwert zurück. Siehe auch SHA2_256_CTX.

source
sha256(io::IO)

Hash-Daten von io mit dem sha256-Algorithmus.

source
SHA.sha384Function
sha384(data)

Hash-Daten mit dem sha384-Algorithmus und geben Sie den resultierenden Hashwert zurück. Siehe auch SHA2_384_CTX.

source
sha384(io::IO)

Hash-Daten aus io mit dem sha384-Algorithmus.

source
SHA.sha512Function
sha512(data)

Hash-Daten mit dem sha512-Algorithmus und geben Sie den resultierenden Hashwert zurück. Siehe auch SHA2_512_CTX.

source
sha512(io::IO)

Hash-Daten von io mit dem sha512-Algorithmus.

source
SHA.sha2_224Function
sha2_224(data)

Hash-Daten mit dem sha2_224-Algorithmus und geben Sie den resultierenden Hash-Wert zurück. Siehe auch SHA2_224_CTX.

source
sha2_224(io::IO)

Hash-Daten von io mit dem sha2_224-Algorithmus.

source
SHA.sha2_256Function
sha2_256(data)

Hash-Daten mit dem sha2_256-Algorithmus und geben Sie den resultierenden Hash-Wert zurück. Siehe auch SHA2_256_CTX.

source
sha2_256(io::IO)

Hash-Daten von io mit dem sha2_256-Algorithmus.

source
SHA.sha2_384Function
sha2_384(data)

Hash-Daten mit dem sha2_384-Algorithmus und geben Sie den resultierenden Digest zurück. Siehe auch SHA2_384_CTX.

source
sha2_384(io::IO)

Hash-Daten aus io mit dem sha2_384-Algorithmus.

source
SHA.sha2_512Function
sha2_512(daten)

Hashdaten mit dem sha2_512 Algorithmus und geben Sie den resultierenden Digest zurück. Siehe auch SHA2_512_CTX.

source
sha2_512(io::IO)

Hash-Daten aus io mit dem sha2_512-Algorithmus.

source

SHA-3

SHA.sha3_224Function
sha3_224(data)

Hash-Daten mit dem sha3_224-Algorithmus und geben Sie den resultierenden Hashwert zurück. Siehe auch SHA3_224_CTX.

source
sha3_224(io::IO)

Hash-Daten von io mit dem sha3_224-Algorithmus.

source
SHA.sha3_256Function
sha3_256(data)

Hash-Daten mit dem sha3_256-Algorithmus und geben Sie den resultierenden Hashwert zurück. Siehe auch SHA3_256_CTX.

source
sha3_256(io::IO)

Hash-Daten von io mit dem sha3_256-Algorithmus.

source
SHA.sha3_384Function
sha3_384(data)

Hash-Daten mit dem sha3_384-Algorithmus und geben Sie den resultierenden Hashwert zurück. Siehe auch SHA3_384_CTX.

source
sha3_384(io::IO)

Hash-Daten von io mit dem sha3_384-Algorithmus.

source
SHA.sha3_512Function
sha3_512(data)

Hash-Daten mit dem sha3_512-Algorithmus und geben Sie den resultierenden Digest zurück. Siehe auch SHA3_512_CTX.

source
sha3_512(io::IO)

Hash-Daten von io mit dem sha3_512-Algorithmus.

source

Working with context

Um einen Hash aus mehreren Elementen zu erstellen, können die SHAX_XXX_CTX()-Typen verwendet werden, um ein zustandsbehaftetes Hash-Objekt zu erstellen, das mit update! aktualisiert und mit digest! abgeschlossen wird.

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

Beachten Sie, dass der SHA3-Code zum Zeitpunkt dieses Schreibens nicht optimiert ist und daher ungefähr um eine Größenordnung langsamer als SHA2 ist.

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

Aktualisieren Sie den SHA-Kontext mit den Bytes in data. Siehe auch digest! zum Finalisieren des Hashs.

Beispiele

julia> ctx = SHA1_CTX()
SHA1-Hash-Zustand

julia> update!(ctx, b"daten, die gehasht werden sollen")
source
SHA.digest!Function
digest!(context)

Finalisieren Sie den SHA-Kontext und geben Sie den Hash als Array von Bytes (Array{Uint8, 1}) zurück. Das Aktualisieren des Kontexts nach dem Aufruf von digest! darauf wird einen Fehler verursachen.

Beispiele

julia> ctx = SHA1_CTX()
SHA1-Hash-Zustand

julia> update!(ctx, b"daten, die gehasht werden sollen")

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

julia> update!(ctx, b"weitere Daten")
ERROR: Kann CTX nicht aktualisieren, nachdem `digest!` darauf aufgerufen wurde
[...]
source

All SHA context types

SHA-1

SHA-2

Bequemlichkeitstypen werden ebenfalls bereitgestellt, wobei SHAXXX_CTX ein Typalias für SHA2_XXX_CTX ist.

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"

Um einen Hash aus mehreren Elementen zu erstellen, können die HMAC_CTX()-Typen verwendet werden, um ein zustandsbehaftetes Hash-Objekt zu erstellen, das mit update! aktualisiert und mit digest! abgeschlossen wird.

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-Kontexttyp

SHA.HMAC_CTXType
HMAC_CTX(ctx::CTX, key::Vector{UInt8}) where {CTX<:SHA_CTX}

Konstruiere einen leeren HMAC_CTX-Kontext.

source

SHA-1

SHA.hmac_sha1Function
hmac_sha1(key, data)

Hash-Daten mit dem sha1-Algorithmus unter Verwendung des übergebenen Schlüssels. Siehe auch HMAC_CTX.

source
hmac_sha1(key, io::IO)

Hash-Daten aus io mit dem übergebenen Schlüssel unter Verwendung des sha1-Algorithmus.

source

SHA-2

SHA.hmac_sha224Function
hmac_sha224(key, data)

Hash-Daten mit dem sha224-Algorithmus unter Verwendung des übergebenen Schlüssels. Siehe auch HMAC_CTX.

source
hmac_sha224(key, io::IO)

Hash-Daten aus io mit dem übergebenen Schlüssel unter Verwendung des sha224-Algorithmus.

source
SHA.hmac_sha256Function
hmac_sha256(key, data)

Hash-Daten mit dem sha256-Algorithmus unter Verwendung des übergebenen Schlüssels. Siehe auch HMAC_CTX.

source
hmac_sha256(key, io::IO)

Hash-Daten aus io mit dem übergebenen Schlüssel unter Verwendung des sha256-Algorithmus.

source
SHA.hmac_sha384Function
hmac_sha384(key, data)

Hash-Daten mit dem sha384-Algorithmus unter Verwendung des übergebenen Schlüssels. Siehe auch HMAC_CTX.

source
hmac_sha384(key, io::IO)

Hash-Daten aus io mit dem übergebenen Schlüssel unter Verwendung des sha384-Algorithmus.

source
SHA.hmac_sha512Function
hmac_sha512(key, data)

Hash-Daten mit dem sha512-Algorithmus unter Verwendung des übergebenen Schlüssels. Siehe auch HMAC_CTX.

source
hmac_sha512(key, io::IO)

Hash-Daten aus io mit dem übergebenen Schlüssel unter Verwendung des sha512-Algorithmus.

source
SHA.hmac_sha2_224Function
hmac_sha2_224(key, data)

Hash-Daten mit dem sha2_224-Algorithmus unter Verwendung des übergebenen Schlüssels. Siehe auch HMAC_CTX.

source
hmac_sha2_224(key, io::IO)

Hash-Daten von io mit dem übergebenen Schlüssel unter Verwendung des sha2_224-Algorithmus.

source
SHA.hmac_sha2_256Function
hmac_sha2_256(key, data)

Hash-Daten mit dem sha2_256-Algorithmus unter Verwendung des übergebenen Schlüssels. Siehe auch HMAC_CTX.

source
hmac_sha2_256(key, io::IO)

Hash-Daten aus io mit dem übergebenen Schlüssel unter Verwendung des sha2_256-Algorithmus.

source
SHA.hmac_sha2_384Function
hmac_sha2_384(schlüssel, daten)

Hashen Sie Daten mit dem sha2_384-Algorithmus unter Verwendung des übergebenen Schlüssels. Siehe auch HMAC_CTX.

source
hmac_sha2_384(key, io::IO)

Hash-Daten aus io mit dem übergebenen Schlüssel unter Verwendung des sha2_384-Algorithmus.

source
SHA.hmac_sha2_512Function
hmac_sha2_512(key, data)

Hash-Daten mit dem sha2_512-Algorithmus unter Verwendung des übergebenen Schlüssels. Siehe auch HMAC_CTX.

source
hmac_sha2_512(key, io::IO)

Hash-Daten aus io mit dem übergebenen Schlüssel unter Verwendung des sha2_512-Algorithmus.

source

SHA-3

SHA.hmac_sha3_224Function
hmac_sha3_224(key, data)

Hash-Daten mit dem sha3_224-Algorithmus unter Verwendung des übergebenen Schlüssels. Siehe auch HMAC_CTX.

source
hmac_sha3_224(key, io::IO)

Hash-Daten aus io mit dem übergebenen Schlüssel unter Verwendung des sha3_224-Algorithmus.

source
SHA.hmac_sha3_256Function
hmac_sha3_256(schlüssel, daten)

Hashen Sie Daten mit dem sha3_256-Algorithmus unter Verwendung des übergebenen Schlüssels. Siehe auch HMAC_CTX.

source
hmac_sha3_256(key, io::IO)

Hash-Daten aus io mit dem übergebenen Schlüssel unter Verwendung des sha3_256-Algorithmus.

source
SHA.hmac_sha3_384Function
hmac_sha3_384(schlüssel, daten)

Hashen Sie Daten mit dem sha3_384-Algorithmus unter Verwendung des übergebenen Schlüssels. Siehe auch HMAC_CTX.

source
hmac_sha3_384(key, io::IO)

Hash-Daten aus io mit dem übergebenen Schlüssel unter Verwendung des sha3_384-Algorithmus.

source
SHA.hmac_sha3_512Function
hmac_sha3_512(schlüssel, daten)

Hashen Sie Daten mit dem sha3_512-Algorithmus unter Verwendung des übergebenen Schlüssels. Siehe auch HMAC_CTX.

source
hmac_sha3_512(key, io::IO)

Hash-Daten aus io mit dem übergebenen Schlüssel unter Verwendung des sha3_512-Algorithmus.

source