مولّد تجزئة SHA-1
إنشاء تجزئة SHA-1 من أي نص
نص الإدخال
تجزئة SHA-1
ستظهر تجزئة SHA-1 هنا…
ما هي تجزئة SHA-1؟
SHA-1 (خوارزمية التجزئة الآمنة 1) دالة تجزئة تشفيرية تُنتج ملخصاً ثابتاً بحجم 160 بت (20 بايت) من أي مدخل. نشرتها NSA وأقرّتها NIST عام 1995 ضمن معيار FIPS PUB 180-1 ووُثِّقت لاحقاً في RFC 3174. صُمِّمت SHA-1 خلفاً أقوى لـ SHA-0 وMD5. تعالج الخوارزمية المدخلات في كتل بحجم 512 بت عبر 80 جولة من العمليات الثنائية، مُنتِجةً بصمة سداسية عشرية من 40 حرفاً شكّلت العمود الفقري لـ SSL/TLS وPGP وSSH وIPsec لأكثر من عقد.
كسائر دوال التجزئة التشفيرية، تُعدّ SHA-1 تحويلاً أحادي الاتجاه: حساب التجزئة من المدخل سريع، لكن استعادة المدخل من التجزئة وحدها أمرٌ مستحيل حسابياً. يُنتج تغيير بتّ واحد في المدخل ملخصاً مختلفاً كلياً بحجم 160 بت — وهي خاصية تُعرف بـ "تأثير الانهيار". تُربط مساحة مدخلات كبيرة بشكل تعسفي بمخرج ثابت 160 بت، مما يعني وجود تصادمات (مدخلان مختلفان بنفس التجزئة) رياضياً. ويدّعي مصمّمو دوال التجزئة أن إيجاد هذه التصادمات يستلزم ما يقارب 2^80 عملية — أي نصف طول البت في المخرج.
في عام 2017، نشر كل من Google وCWI Amsterdam هجوم SHAttered، إذ أثبتا إمكانية إحداث أول تصادم عملي في SHA-1 بإنتاج ملفَّي PDF مختلفَين بنفس الملخص. استغرق الهجوم نحو 2^63.1 عملية حسابية لـ SHA-1 — أقل بكثير من الحدّ النظري 2^80. وفي عام 2020، خفّض Gaetan Leurent وThomas Peyrin التكلفة أكثر بهجوم تصادم ذي بادئة مختارة يتطلب نحو 2^63.4 عملية. نتيجةً لذلك، أعلنت جميع المتصفحات الكبرى وجهات إصدار الشهادات والهيئات المعيارية إيقاف SHA-1 للتوقيعات الرقمية وشهادات TLS. غير أن SHA-1 لا يزال مستخدماً في أغراض غير أمنية: معرّفات كائنات Git (رغم انتقال Git تدريجياً إلى SHA-256)، وبنى HMAC القديمة، وفحص سلامة الملفات حيث لا يُشترط تحمّل التصادمات الإجبارية.
لماذا تستخدم مولّد SHA-1 هذا؟
أنشئ تجزئات SHA-1 فوراً دون تثبيت أي شيء أو كتابة كود. الصق نصّك واحصل على الملخص السداسي العشري المكوّن من 40 حرفاً في الوقت الفعلي — مفيد للتحقق من المجاميع الاختبارية القديمة، أو تصحيح أخطاء الداخليات في Git، أو اختبار سير العمل المبني على التجزئة.
حالات استخدام SHA-1
SHA-1 مقارنةً بخوارزميات التجزئة الأخرى
تُنتج SHA-1 ملخصاً بحجم 160 بت — أطول من MD5 (128 بت) لكنه أقصر بكثير من خوارزميات عائلة SHA-2. يقارن الجدول أدناه أحجام الملخصات والمعايير وحالات الاستخدام المناسبة لكل خوارزمية.
| الخوارزمية | حجم الملخص | طول السداسي العشري | المعيار | الأنسب لـ |
|---|---|---|---|---|
| SHA-1 | 160 bits | 40 hex chars | 1995 / RFC 3174 | Deprecated — legacy git commits, old TLS |
| SHA-256 | 256 bits | 64 hex chars | 2001 / FIPS 180-4 | TLS certificates, blockchain, JWTs |
| SHA-384 | 384 bits | 96 hex chars | 2001 / FIPS 180-4 | Government systems, higher security margin |
| SHA-512 | 512 bits | 128 hex chars | 2001 / FIPS 180-4 | Digital signatures, HMAC with large keys |
| MD5 | 128 bits | 32 hex chars | 1992 / RFC 1321 | Checksums only — broken since 2004 |
| SHA-3 | 256 bits | 64 hex chars | 2015 / FIPS 202 | Post-quantum readiness, alternative to SHA-2 |
| BLAKE3 | 256 bits | 64 hex chars | 2020 | High-performance checksums, Merkle trees |
كيف تعمل SHA-1؟
تتبع SHA-1 بناء Merkle-Damgård: يُضاف حشو إلى الرسالة، ثم تُقسَّم إلى كتل 512 بت، وتُعالَج كل كتلة عبر 80 جولة من العمليات الثنائية التي تمزج المدخل مع جدول رسائل مشتق من الكتلة. تحمل خمس كلمات حالة بحجم 32 بت (H0 إلى H4) حالة التجزئة الجارية، ويُنتج تسلسلها النهائي الملخص البالغ 160 بت.
SHA-1: 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed
(160 bits = 20 bytes = 40 hex characters)
| الخطوة | الوصف |
|---|---|
| Padding | Append a 1-bit, then zeros, until message length is 448 mod 512. Append the original length as a 64-bit big-endian integer. |
| Block splitting | Divide the padded message into 512-bit (64-byte) blocks. |
| Expansion | Expand each 16-word block into 80 words using a left-rotate-by-1 XOR feedback schedule. |
| Compression | Process 80 rounds per block using four nonlinear functions (Ch, Parity, Maj, Parity) across rounds 0-19, 20-39, 40-59, and 60-79. |
| Output | Concatenate the five 32-bit state words (H0-H4) into a 160-bit (20-byte) digest, rendered as 40 hexadecimal characters. |
الفارق الجوهري بين SHA-1 وMD5 هو عدد كلمات الحالة (5 مقابل 4)، وعدد الجولات لكل كتلة (80 مقابل 64)، واستخدام جدول رسائل مع تغذية راجعة بالتدوير الأيسر. تمنح هذه الفوارق SHA-1 مخرجاً أكبر (160 مقابل 128 بت) وهامشاً أمنياً أوسع في الأصل، رغم أن الخوارزميتين تُعدّان الآن مكسورتَين من حيث تحمّل التصادمات.
أمثلة كودية
كيفية توليد تجزئات SHA-1 في لغات وبيئات شائعة. على عكس MD5، تتوفر SHA-1 في Web Crypto API للمتصفح، مما يجعلها قابلة للاستخدام دون مكتبات خارجية في بيئتَي المتصفح وNode.js.
// SHA-1 is available in the Web Crypto API
async function sha1(text) {
const data = new TextEncoder().encode(text)
const hashBuffer = await crypto.subtle.digest('SHA-1', data)
const hashArray = Array.from(new Uint8Array(hashBuffer))
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('')
}
await sha1('hello world')
// → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"
// Node.js (built-in crypto module)
const crypto = require('crypto')
crypto.createHash('sha1').update('hello world').digest('hex')
// → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"import hashlib
# Basic SHA-1 hash
result = hashlib.sha1(b'hello world').hexdigest()
print(result) # → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"
# Hash a string (encode to bytes first)
text = 'hello world'
hashlib.sha1(text.encode('utf-8')).hexdigest()
# → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"
# Hash a file in chunks
with open('file.bin', 'rb') as f:
sha1 = hashlib.sha1()
for chunk in iter(lambda: f.read(8192), b''):
sha1.update(chunk)
print(sha1.hexdigest())package main
import (
"crypto/sha1"
"fmt"
)
func main() {
data := []byte("hello world")
hash := sha1.Sum(data)
fmt.Printf("%x\n", hash)
// → 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed
}# Using sha1sum (Linux) or shasum (macOS) echo -n "hello world" | sha1sum # → 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed - # macOS echo -n "hello world" | shasum -a 1 # → 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed - # Hash a file sha1sum package.json # → a1b2c3d4e5f6... package.json # Using openssl (cross-platform) echo -n "hello world" | openssl sha1 # → SHA1(stdin)= 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed