مولّد تجزئة SHA-512
إنشاء تجزئة SHA-512 من أي نص
نص الإدخال
تجزئة SHA-512
ستظهر تجزئة SHA-512 هنا…
ما هي تجزئة SHA-512؟
SHA-512 دالة تجزئة تشفيرية مُعرَّفة في معيار NIST FIPS 180-4 بوصفها أكبر عضو في عائلة SHA-2. تقبل مدخلاً بطول اعتباطي وتُنتج ملخصاً ثابتاً بحجم 512 بت (64 بايت)، يُعرض كسلسلة من 128 حرفاً سداسيَّ عشري. تُستخدم SHA-512 في التوقيعات الرقمية (تعتمد Ed25519 داخلياً على SHA-512)، وبناءات HMAC، والتحقق من سلامة الملفات، والبروتوكولات التشفيرية التي تستفيد من هامش أمان واسع.
تعمل SHA-512 على كتل بحجم 1024 بت (128 بايت) باستخدام حساب على كلمات 64 بت وثمانين جولة ضغط. قيم التجزئة الأولية الثمانية مشتقة من الأجزاء الكسرية للجذور التربيعية للأعداد الأولية الثمانية الأولى، وثوابت الجولات الثمانون مشتقة من الجذور التكعيبية لأول ثمانين عدداً أولياً. ولأنها تستخدم عمليات 64 بت الأصلية، كثيراً ما تكون SHA-512 أسرع من SHA-256 على المعالجات الحديثة ذات 64 بت، رغم إنتاجها ملخصاً أطول.
SHA-384 وSHA-512/224 وSHA-512/256 جميعها متغيرات مختصرة من SHA-512 تشترك في البنية الداخلية ذاتها مع اختلاف قيم التجزئة الأولية وعدد أقل من بتات المخرج. عندما تحتاج إلى أقصى طول ملخص تُقدمه عائلة SHA-2، أو حين يفرض بروتوكول معين SHA-512 (كـ Ed25519 أو بعض مخططات اشتقاق المفاتيح القائمة على HMAC)، فإن SHA-512 هي الخيار الصحيح. توفر 256 بتاً من مقاومة التصادم، مساوية لـ SHA-3-512 وفائقة بكثير للحد البالغ 128 بتاً في SHA-256.
لماذا تستخدم مولّد SHA-512 هذا؟
حساب تجزئة SHA-512 يتطلب عادةً أمر طرفية أو بضعة أسطر من الكود. تتيح لك هذه الأداة المستندة إلى المتصفح إنشاء ملخصات SHA-512 فوراً دون تثبيت برامج أو التبديل إلى الطرفية أو كتابة سكريبتات مؤقتة.
حالات استخدام مولّد تجزئة SHA-512
مقارنة متغيرات عائلة SHA-2
تنتمي SHA-512 إلى عائلة SHA-2 المُعرَّفة في FIPS 180-4. يقارن الجدول أدناه متغيرات SHA-2 التي تشترك مع SHA-512 في البنية الداخلية ذات 64 بت، مع SHA-256 كمرجع.
| المتغير | حجم الملخص | طول السداسي العشري | الحجم بالبايت | الأنسب لـ |
|---|---|---|---|---|
| SHA-256 | 256 bits | 64 hex chars | 32 bytes | TLS certificates, blockchain, JWTs, SRI |
| SHA-384 | 384 bits | 96 hex chars | 48 bytes | TLS 1.3 CertificateVerify, CNSA/Suite B |
| SHA-512 | 512 bits | 128 hex chars | 64 bytes | Digital signatures, HMAC, Ed25519, file integrity |
| SHA-512/224 | 224 bits | 56 hex chars | 28 bytes | SHA-512 speed on 64-bit CPUs, 224-bit output |
| SHA-512/256 | 256 bits | 64 hex chars | 32 bytes | SHA-512 speed on 64-bit CPUs, 256-bit output |
SHA-512 مقابل SHA-256 مقابل SHA-384 مقابل SHA-3-512
يعتمد اختيار خوارزمية التجزئة المناسبة على متطلبات الأمان وقيود الأداء ومواصفات البروتوكول. توفر SHA-512 أوسع ملخص في عائلة SHA-2 وكثيراً ما تكون أسرع من SHA-256 على الأجهزة ذات 64 بت. تشمل هذه المقارنة الخصائص الأكثر أهمية عند الاختيار بينها.
| الخاصية | SHA-512 | SHA-256 | SHA-384 | SHA-3-512 |
|---|---|---|---|---|
| Digest size | 512 bits (128 hex) | 256 bits (64 hex) | 384 bits (96 hex) | 512 bits (128 hex) |
| Block size | 1024 bits | 512 bits | 1024 bits | 1600 bits (sponge) |
| Word size | 64 bits | 32 bits | 64 bits | N/A (sponge) |
| Rounds | 80 | 64 | 80 | 24 |
| Collision resistance | 2^256 operations | 2^128 operations | 2^192 operations | 2^256 operations |
| Security status | Secure | Secure | Secure | Secure |
| Standard | FIPS 180-4 | FIPS 180-4 | FIPS 180-4 | FIPS 202 |
| Web Crypto API | Yes | Yes | Yes | No |
| 64-bit optimized | Yes | No (32-bit words) | Yes | Yes |
| Primary use today | Ed25519, HMAC, file checksums | TLS, blockchain, SRI | TLS 1.3, CNSA | Backup standard |
كيف تعمل SHA-512 داخلياً؟
تعالج SHA-512 المدخل عبر بناء Merkle–Damgård باستخدام كتل بحجم 1024 بت. تُهيّئ ثمانية كلمات حالة بحجم 64 بت (H0–H7) من الأجزاء الكسرية للجذور التربيعية للأعداد الأولية الثمانية الأولى. تمر كل كتلة بثمانين جولة خلط تستخدم عمليات بتية (AND وXOR وNOT والتدوير الأيمن والإزاحة الأيمن) على كلمات 64 بت، مقترنة بثمانين ثابتاً للجولات مشتقة من الجذور التكعيبية لأول ثمانين عدداً أولياً.
SHA-512: 309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee511a7c7a9bcd3ca86d4cd86f
989dd35bc5ff499670da34255b45b0cfd830e81f605dcf7dc5542e93ae9cd76f
(512 bits = 64 bytes = 128 hex characters)
| الخطوة | الوصف |
|---|---|
| Padding | Append a 1-bit, then zeros until the message length is 896 mod 1024. Append the original length as a 128-bit big-endian integer. |
| Block splitting | Divide the padded message into 1024-bit (128-byte) blocks. |
| Message schedule | Expand each 16-word (64-bit) block into 80 words using sigma functions with right-rotate and right-shift operations on 64-bit values. |
| Compression | Process 80 rounds per block using Ch, Maj, and two Sigma functions with 80 round constants derived from the cube roots of the first 80 primes. |
| Output | Concatenate the eight 64-bit state words (H0–H7) into a 512-bit (64-byte) digest, rendered as 128 hexadecimal characters. |
حجم الكلمة الأوسع البالغ 64 بت هو المُمَيِّز الرئيسي عن SHA-256. على المعالجات ذات 64 بت، تعالج كل عملية ضعف عدد البتات في كل دورة، وهذا سبب تفوق SHA-512 أحياناً على SHA-256 في الاختبارات المعيارية رغم تشغيلها ثمانين جولة بدلاً من 64. يضمن تأثير الانهيار أن قلب بت إدخال واحد يغيّر نحو 50% من جميع بتات المخرج الـ 512.
أمثلة كود SHA-512
SHA-512 مدعومة بشكل أصلي في كل لغة وبيئة تشغيل رئيسية. توفرها Web Crypto API في المتصفحات دون الحاجة إلى أي مكتبة. تغطي الأمثلة أدناه الأنماط الشائعة بما فيها معالجة Unicode وتجزئة الملفات.
// Works in all modern browsers and Node.js 18+
async function sha512(text) {
const data = new TextEncoder().encode(text)
const hashBuffer = await crypto.subtle.digest('SHA-512', data)
const hashArray = Array.from(new Uint8Array(hashBuffer))
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('')
}
await sha512('hello world')
// → "309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee511a7c7a9bcd3ca86d4cd86f989dd35bc5ff499670da34255b45b0cfd830e81f605dcf7dc5542e93ae9cd76f"
// Node.js (built-in crypto module)
const crypto = require('crypto')
crypto.createHash('sha512').update('hello world').digest('hex')
// → "309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee511a7c7a9bcd3ca86d4cd86f989dd35bc5ff499670da34255b45b0cfd830e81f605dcf7dc5542e93ae9cd76f"import hashlib
# Basic SHA-512 hash
result = hashlib.sha512(b'hello world').hexdigest()
print(result)
# → "309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee..."
# Hash a string with Unicode (encode to bytes first)
text = 'café ☕'
hashlib.sha512(text.encode('utf-8')).hexdigest()
# → 128-character hex string
# Hash a large file in chunks (memory-efficient)
with open('release.tar.gz', 'rb') as f:
sha = hashlib.sha512()
for chunk in iter(lambda: f.read(8192), b''):
sha.update(chunk)
print(sha.hexdigest())package main
import (
"crypto/sha512"
"fmt"
)
func main() {
data := []byte("hello world")
hash := sha512.Sum512(data)
fmt.Printf("%x\n", hash)
// → 309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee511a7c7a9bcd3ca86d4cd86f...
}# Using sha512sum (Linux) or shasum (macOS) echo -n "hello world" | sha512sum # → 309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee... - # macOS echo -n "hello world" | shasum -a 512 # → 309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee... - # Verify a file checksum echo "309ecc48... myfile.bin" | sha512sum -c # → myfile.bin: OK # Using openssl (cross-platform) echo -n "hello world" | openssl dgst -sha512 # → SHA2-512(stdin)= 309ecc489c12d6eb4cc40f50c902f2b4...