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
— Functionsha1(data)
تجزئة البيانات باستخدام خوارزمية sha1
وإرجاع التجزئة الناتجة. انظر أيضًا SHA.SHA1_CTX
.
sha1(io::IO)
تجزئة البيانات من io باستخدام خوارزمية sha1
.
SHA-2
SHA.sha224
— Functionsha224(data)
هاش البيانات باستخدام خوارزمية sha224
وأعد العائد الناتج. انظر أيضًا SHA.SHA2_224_CTX
.
sha224(io::IO)
تجزئة البيانات من io باستخدام خوارزمية sha224
.
SHA.sha256
— Functionsha256(data)
تجزئة البيانات باستخدام خوارزمية sha256
وإرجاع التجزئة الناتجة. انظر أيضًا SHA.SHA2_256_CTX
.
sha256(io::IO)
تجزئة البيانات من io باستخدام خوارزمية sha256
.
SHA.sha384
— Functionsha384(data)
قم بتجزئة البيانات باستخدام خوارزمية sha384
وأعد العائد الناتج. انظر أيضًا SHA.SHA2_384_CTX
.
sha384(io::IO)
تجزئة البيانات من io باستخدام خوارزمية sha384
.
SHA.sha512
— Functionsha512(data)
قم بتجزئة البيانات باستخدام خوارزمية sha512
وأعد العائد الناتج. انظر أيضًا SHA.SHA2_512_CTX
.
sha512(io::IO)
تجزئة البيانات من io باستخدام خوارزمية sha512
.
SHA.sha2_224
— Functionsha2_224(data)
قم بتجزئة البيانات باستخدام خوارزمية sha2_224
وأعد العائد الناتج. انظر أيضًا SHA.SHA2_224_CTX
.
sha2_224(io::IO)
تجزئة البيانات من io باستخدام خوارزمية sha2_224
.
SHA.sha2_256
— Functionsha2_256(data)
قم بتجزئة البيانات باستخدام خوارزمية sha2_256
وأعد العائد الناتج. انظر أيضًا SHA.SHA2_256_CTX
.
sha2_256(io::IO)
تجزئة البيانات من io باستخدام خوارزمية sha2_256
.
SHA.sha2_384
— Functionsha2_384(data)
هاش البيانات باستخدام خوارزمية sha2_384
وأعد العائد الناتج. انظر أيضًا SHA.SHA2_384_CTX
.
sha2_384(io::IO)
تجزئة البيانات من io باستخدام خوارزمية sha2_384
.
SHA.sha2_512
— Functionsha2_512(data)
قم بتجزئة البيانات باستخدام خوارزمية sha2_512
وأعد العائد الناتج. انظر أيضًا SHA.SHA2_512_CTX
.
sha2_512(io::IO)
تجزئة البيانات من io باستخدام خوارزمية sha2_512
.
SHA-3
SHA.sha3_224
— Functionsha3_224(data)
قم بتجزئة البيانات باستخدام خوارزمية sha3_224
وأعد العائد الناتج. انظر أيضًا SHA.SHA3_224_CTX
.
sha3_224(io::IO)
تجزئة البيانات من io باستخدام خوارزمية sha3_224
.
SHA.sha3_256
— Functionsha3_256(data)
هاش البيانات باستخدام خوارزمية sha3_256
وأعد العائد الناتج. انظر أيضًا SHA.SHA3_256_CTX
.
sha3_256(io::IO)
تجزئة البيانات من io باستخدام خوارزمية sha3_256
.
SHA.sha3_384
— Functionsha3_384(data)
قم بتجزئة البيانات باستخدام خوارزمية sha3_384
وأعد العائد الناتج. انظر أيضًا SHA.SHA3_384_CTX
.
sha3_384(io::IO)
تجزئة البيانات من io باستخدام خوارزمية sha3_384
.
SHA.sha3_512
— Functionsha3_512(data)
هاش البيانات باستخدام خوارزمية sha3_512
وأعد العائد الناتج. انظر أيضًا SHA.SHA3_512_CTX
.
sha3_512(io::IO)
تجزئة البيانات من io باستخدام خوارزمية sha3_512
.
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!
— Functionupdate!(context, data[, datalen])
قم بتحديث سياق SHA مع البايتات في البيانات. انظر أيضًا digest!
لإنهاء التجزئة.
أمثلة
julia> ctx = SHA1_CTX()
SHA1 حالة تجزئة
julia> update!(ctx, b"data to to be hashed")
SHA.digest!
— Functiondigest!(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
[...]
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-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)
تجزئة البيانات من io
باستخدام المفتاح المرسل مع خوارزمية sha256
.
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
.