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. هذا يجعل من السهل جداً حساب checksum لملف:

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

نظرًا للاستخدام العام لـ sha256 للإشارة إلى sha2_256، يتم توفير دوال ملائمة، تربط استدعاءات دالة shaxxx() بـ sha2_xxx(). بالنسبة لـ SHA-3، لا توجد مثل هذه المصطلحات العامية ويجب على المستخدم استخدام الأسماء الكاملة sha3_xxx().

shaxxx() تأخذ AbstractString وكائنات شبيهة بالمصفوفات (NTuple و Array) مع عناصر من نوع UInt8.

SHA-1

SHA.sha1 — Function
sha1(data)

تجزئة البيانات باستخدام خوارزمية sha1 وإرجاع التجزئة الناتجة. انظر أيضًا SHA.SHA1_CTX.

source
sha1(io::IO)

تجزئة البيانات من io باستخدام خوارزمية sha1.

source

SHA-2

SHA.sha224 — Function
sha224(data)

هاش البيانات باستخدام خوارزمية sha224 وأعد العائد الناتج. انظر أيضًا SHA.SHA2_224_CTX.

source
sha224(io::IO)

تجزئة البيانات من io باستخدام خوارزمية sha224.

source
SHA.sha256 — Function
sha256(data)

تجزئة البيانات باستخدام خوارزمية sha256 وإرجاع التجزئة الناتجة. انظر أيضًا SHA.SHA2_256_CTX.

source
sha256(io::IO)

تجزئة البيانات من io باستخدام خوارزمية sha256.

source
SHA.sha384 — Function
sha384(data)

قم بتجزئة البيانات باستخدام خوارزمية sha384 وأعد العائد الناتج. انظر أيضًا SHA.SHA2_384_CTX.

source
sha384(io::IO)

تجزئة البيانات من io باستخدام خوارزمية sha384.

source
SHA.sha512 — Function
sha512(data)

قم بتجزئة البيانات باستخدام خوارزمية sha512 وأعد العائد الناتج. انظر أيضًا SHA.SHA2_512_CTX.

source
sha512(io::IO)

تجزئة البيانات من io باستخدام خوارزمية sha512.

source
SHA.sha2_224 — Function
sha2_224(data)

قم بتجزئة البيانات باستخدام خوارزمية sha2_224 وأعد العائد الناتج. انظر أيضًا SHA.SHA2_224_CTX.

source
sha2_224(io::IO)

تجزئة البيانات من io باستخدام خوارزمية sha2_224.

source
SHA.sha2_256 — Function
sha2_256(data)

قم بتجزئة البيانات باستخدام خوارزمية sha2_256 وأعد العائد الناتج. انظر أيضًا SHA.SHA2_256_CTX.

source
sha2_256(io::IO)

تجزئة البيانات من io باستخدام خوارزمية sha2_256.

source
SHA.sha2_384 — Function
sha2_384(data)

هاش البيانات باستخدام خوارزمية sha2_384 وأعد العائد الناتج. انظر أيضًا SHA.SHA2_384_CTX.

source
sha2_384(io::IO)

تجزئة البيانات من io باستخدام خوارزمية sha2_384.

source
SHA.sha2_512 — Function
sha2_512(data)

قم بتجزئة البيانات باستخدام خوارزمية sha2_512 وأعد العائد الناتج. انظر أيضًا SHA.SHA2_512_CTX.

source
sha2_512(io::IO)

تجزئة البيانات من io باستخدام خوارزمية sha2_512.

source

SHA-3

SHA.sha3_224 — Function
sha3_224(data)

قم بتجزئة البيانات باستخدام خوارزمية sha3_224 وأعد العائد الناتج. انظر أيضًا SHA.SHA3_224_CTX.

source
sha3_224(io::IO)

تجزئة البيانات من io باستخدام خوارزمية sha3_224.

source
SHA.sha3_256 — Function
sha3_256(data)

هاش البيانات باستخدام خوارزمية sha3_256 وأعد العائد الناتج. انظر أيضًا SHA.SHA3_256_CTX.

source
sha3_256(io::IO)

تجزئة البيانات من io باستخدام خوارزمية sha3_256.

source
SHA.sha3_384 — Function
sha3_384(data)

قم بتجزئة البيانات باستخدام خوارزمية sha3_384 وأعد العائد الناتج. انظر أيضًا SHA.SHA3_384_CTX.

source
sha3_384(io::IO)

تجزئة البيانات من io باستخدام خوارزمية sha3_384.

source
SHA.sha3_512 — Function
sha3_512(data)

هاش البيانات باستخدام خوارزمية sha3_512 وأعد العائد الناتج. انظر أيضًا SHA.SHA3_512_CTX.

source
sha3_512(io::IO)

تجزئة البيانات من io باستخدام خوارزمية sha3_512.

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.

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

قم بتحديث سياق SHA مع البايتات في البيانات. انظر أيضًا digest! لإنهاء التجزئة.

أمثلة

julia> ctx = SHA1_CTX()
SHA1 حالة تجزئة

julia> update!(ctx, b"data to to be hashed")
source
SHA.digest! — Function
digest!(context)

قم بإنهاء سياق SHA وإرجاع التجزئة كمصفوفة من البايتات (Array{Uint8, 1}). تحديث السياق بعد استدعاء digest! عليه سيؤدي إلى حدوث خطأ.

أمثلة

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

julia> update!(ctx, b"more data")
ERROR: Cannot update CTX after `digest!` has been called on it
[...]
source

All SHA context types

SHA-1

SHA-2

تتوفر أيضًا أنواع ملائمة، حيث SHAXXX_CTX هو اسم مستعار لنوع SHA2_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_CTX — Type
HMAC_CTX(ctx::CTX, key::Vector{UInt8}) where {CTX<:SHA_CTX}

قم بإنشاء سياق HMAC_CTX فارغ.

source

SHA-1

SHA.hmac_sha1 — Function
hmac_sha1(key, data)

تجزئة البيانات باستخدام خوارزمية sha1 باستخدام المفتاح الممرر. انظر أيضًا HMAC_CTX.

source
hmac_sha1(key, io::IO)

تجزئة البيانات من io باستخدام المفتاح الممرر باستخدام خوارزمية sha1.

source

SHA-2

SHA.hmac_sha224 — Function
hmac_sha224(key, data)

تجزئة البيانات باستخدام خوارزمية sha224 باستخدام المفتاح الممرر. انظر أيضًا HMAC_CTX.

source
hmac_sha224(key, io::IO)

تجزئة البيانات من io باستخدام المفتاح الممرر مع خوارزمية sha224.

source
SHA.hmac_sha256 — Function
hmac_sha256(key, data)

تجزئة البيانات باستخدام خوارزمية sha256 باستخدام المفتاح الممرر. انظر أيضًا HMAC_CTX.

source
hmac_sha256(key, io::IO)

تجزئة البيانات من io باستخدام المفتاح المرسل مع خوارزمية sha256.

source
SHA.hmac_sha384 — Function
hmac_sha384(key, data)

تجزئة البيانات باستخدام خوارزمية sha384 باستخدام المفتاح الممرر. انظر أيضًا HMAC_CTX.

source
hmac_sha384(key, io::IO)

تجزئة البيانات من io باستخدام المفتاح المرسل مع خوارزمية sha384.

source
SHA.hmac_sha512 — Function
hmac_sha512(key, data)

تجزئة البيانات باستخدام خوارزمية sha512 باستخدام المفتاح الممرر. انظر أيضًا HMAC_CTX.

source
hmac_sha512(key, io::IO)

تجزئة البيانات من io باستخدام المفتاح المرسل مع خوارزمية sha512.

source
SHA.hmac_sha2_224 — Function
hmac_sha2_224(key, data)

هاش البيانات باستخدام خوارزمية sha2_224 باستخدام المفتاح الممرر. انظر أيضًا HMAC_CTX.

source
hmac_sha2_224(key, io::IO)

تجزئة البيانات من io باستخدام المفتاح الممرر باستخدام خوارزمية sha2_224.

source
SHA.hmac_sha2_256 — Function
hmac_sha2_256(key, data)

تجزئة البيانات باستخدام خوارزمية sha2_256 باستخدام المفتاح الممرر. انظر أيضًا HMAC_CTX.

source
hmac_sha2_256(key, io::IO)

قم بتجزئة البيانات من io باستخدام المفتاح المرسل باستخدام خوارزمية sha2_256.

source
SHA.hmac_sha2_384 — Function
hmac_sha2_384(key, data)

تجزئة البيانات باستخدام خوارزمية sha2_384 باستخدام المفتاح الممرر. انظر أيضًا HMAC_CTX.

source
hmac_sha2_384(key, io::IO)

تجزئة البيانات من io باستخدام المفتاح الممرر باستخدام خوارزمية sha2_384.

source
SHA.hmac_sha2_512 — Function
hmac_sha2_512(key, data)

تجزئة البيانات باستخدام خوارزمية sha2_512 باستخدام المفتاح الممرر. انظر أيضًا HMAC_CTX.

source
hmac_sha2_512(key, io::IO)

تجزئة البيانات من io باستخدام المفتاح الممرر باستخدام خوارزمية sha2_512.

source

SHA-3

SHA.hmac_sha3_224 — Function
hmac_sha3_224(key, data)

تجزئة البيانات باستخدام خوارزمية sha3_224 باستخدام المفتاح الممرر. انظر أيضًا HMAC_CTX.

source
hmac_sha3_224(key, io::IO)

تجزئة البيانات من io باستخدام المفتاح الممرر باستخدام خوارزمية sha3_224.

source
SHA.hmac_sha3_256 — Function
hmac_sha3_256(key, data)

تجزئة البيانات باستخدام خوارزمية sha3_256 باستخدام المفتاح الممرر. انظر أيضًا HMAC_CTX.

source
hmac_sha3_256(key, io::IO)

تجزئة البيانات من io باستخدام المفتاح الممرر باستخدام خوارزمية sha3_256.

source
SHA.hmac_sha3_384 — Function
hmac_sha3_384(key, data)

تجزئة البيانات باستخدام خوارزمية sha3_384 باستخدام المفتاح الممرر. انظر أيضًا HMAC_CTX.

source
hmac_sha3_384(key, io::IO)

تجزئة البيانات من io باستخدام المفتاح الممرر باستخدام خوارزمية sha3_384.

source
SHA.hmac_sha3_512 — Function
hmac_sha3_512(key, data)

تجزئة البيانات باستخدام خوارزمية sha3_512 باستخدام المفتاح الممرر. انظر أيضًا HMAC_CTX.

source
hmac_sha3_512(key, io::IO)

تجزئة البيانات من io باستخدام المفتاح المرسل مع خوارزمية sha3_512.

source