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.sha1Function
sha1(data)

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

source
sha1(io::IO)

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

source

SHA-2

SHA.sha224Function
sha224(data)

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

source
sha224(io::IO)

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

source
SHA.sha256Function
sha256(data)

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

source
sha256(io::IO)

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

source
SHA.sha384Function
sha384(data)

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

source
sha384(io::IO)

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

source
SHA.sha512Function
sha512(data)

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

source
sha512(io::IO)

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

source
SHA.sha2_224Function
sha2_224(data)

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

source
sha2_224(io::IO)

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

source
SHA.sha2_256Function
sha2_256(data)

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

source
sha2_256(io::IO)

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

source
SHA.sha2_384Function
sha2_384(data)

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

source
sha2_384(io::IO)

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

source
SHA.sha2_512Function
sha2_512(data)

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

source
sha2_512(io::IO)

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

source

SHA-3

SHA.sha3_224Function
sha3_224(data)

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

source
sha3_224(io::IO)

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

source
SHA.sha3_256Function
sha3_256(data)

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

source
sha3_256(io::IO)

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

source
SHA.sha3_384Function
sha3_384(data)

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

source
sha3_384(io::IO)

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

source
SHA.sha3_512Function
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_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)

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

source

SHA-2

SHA.hmac_sha224Function
hmac_sha224(key, data)

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

source
hmac_sha224(key, io::IO)

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

source
SHA.hmac_sha256Function
hmac_sha256(key, data)

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

source
hmac_sha256(key, io::IO)

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

source
SHA.hmac_sha384Function
hmac_sha384(key, data)

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

source
hmac_sha384(key, io::IO)

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

source
SHA.hmac_sha512Function
hmac_sha512(key, data)

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

source
hmac_sha512(key, io::IO)

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

source
SHA.hmac_sha2_224Function
hmac_sha2_224(key, data)

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

source
hmac_sha2_224(key, io::IO)

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

source
SHA.hmac_sha2_256Function
hmac_sha2_256(key, data)

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

source
hmac_sha2_256(key, io::IO)

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

source
SHA.hmac_sha2_384Function
hmac_sha2_384(key, data)

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

source
hmac_sha2_384(key, io::IO)

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

source
SHA.hmac_sha2_512Function
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_224Function
hmac_sha3_224(key, data)

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

source
hmac_sha3_224(key, io::IO)

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

source
SHA.hmac_sha3_256Function
hmac_sha3_256(key, data)

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

source
hmac_sha3_256(key, io::IO)

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

source
SHA.hmac_sha3_384Function
hmac_sha3_384(key, data)

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

source
hmac_sha3_384(key, io::IO)

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

source
SHA.hmac_sha3_512Function
hmac_sha3_512(key, data)

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

source
hmac_sha3_512(key, io::IO)

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

source