مولّد تجزئة SHA-1 (160 بت — إرث)
أنشئ تجزئات SHA-1 في متصفحك — مخرجات سداسية من 40 حرفاً، بدون رفع. أداة إرثية لمعرّفات Git وفحص الشهادات القديمة وعمليات التدقيق. بياناتك لا تغادر جهازك.
يتحقق فريقنا من مخرجات SHA-1 وفقاً لمتجهات اختبار FIPS 180-1 ويؤكد صحة Web Crypto API وصياغة الإهمال.
ما هو SHA-1؟
SHA-1 (خوارزمية التجزئة الآمنة 1) هي دالة تجزئة تعموية بحجم 160 بت نشرتها NIST في 1995 ضمن FIPS 180-1. صممتها وكالة الأمن القومي الأمريكية لتحلّ محل SHA-0 (نسخة سابقة معيبة سُحبت سريعاً عام 1993)، وكانت الخوارزمية السائدة للتوقيعات الرقمية وشهادات TLS وتوقيع الكود خلال العقد الأول من الألفية الثالثة.
تاريخ الكسر: في 2005، نشر فريق Xiaoyun Wang هجوماً نظرياً يُقلّص مقاومة SHA-1 للتصادم من المتوقع 2^80 إلى 2^63 عملية. في فبراير 2017، أصدر Google وCWI Amsterdam هجوم SHAttered، منتجَين وثيقتَي PDF مختلفتَين بتجزئتَي SHA-1 متطابقتَين باستخدام نحو 110 سنة GPU. كان هذا الكسر العملي الحاسم. كانت NIST قد أهملت بالفعل SHA-1 للتوقيعات في 2011 (NIST SP 800-131A); اتبع مطوّرو المتصفحات ومراكز إصدار الشهادات بإزالة دعم شهادات SHA-1 في 2016–2017.
الوضع الحالي: SHA-1 مُهمَلة لجميع الاستخدامات الحساسة أمنياً — التوقيعات الرقمية، بصمات الشهادات، تخزين كلمات المرور، وتوقيع الكود. تستمر في تنسيق معرّف كائنات Git (تجزئات commit) حيث تُستخدم للعنونة بالمحتوى لا للأمان، وفي مجاميع اختبارية لبرامج إرثية لم يُهاجَر بعد. أضاف مشروع Git دعم تنسيق SHA-256 في الإصدار 2.29 (أكتوبر 2020). جميع المشاريع الجديدة يجب أن تستخدم SHA-256 أو ما هو أقوى.
تحسب هذه الأداة تجزئة SHA-1 بالكامل في متصفحك باستخدام crypto.subtle.digest('SHA-1', ...) من Web Crypto API. لا تُرسل أي بايتات إلى أي خادم.
// Hash text using Web Crypto API (SHA-1 — legacy use only)
async function sha1(text) {
const data = new TextEncoder().encode(text);
const hash = await crypto.subtle.digest('SHA-1', data);
return Array.from(new Uint8Array(hash))
.map(b => b.toString(16).padStart(2, '0'))
.join('');
}
await sha1('Hello, World!');
// → '0a0a9f2a6772942557ab5355d76af442f8f65e01'
// ⚠️ SHA-1 is broken — use SHA-256 for new work. أمثلة SHA-1
البحث في بصمة commit في Git
tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904 author A Dev <dev@example.com> 1716854400 +0000 committer A Dev <dev@example.com> 1716854400 +0000 Initial commit
يخزّن Git كل commit ككائن commit، ومعرّفه هو تجزئة SHA-1 لرأسٍ يليه المحتوى: كلمة commit ثم مسافة ثم طول المحتوى بالبايت ثم بايت NUL، وبعدها نص الـ commit الخام المعروض هنا. لذلك فإن لصق نص الـ commit وحده يعطي تجزئة مختلفة عن المعرّف ذي الأربعين حرفًا الذي يعرضه git log. لإعادة إنتاج المعرّف، أنشئ هذه البايتات بالأمر (printf 'commit %s\0' $(git cat-file -s HEAD); git cat-file commit HEAD) > commit.bin ثم أفلت الملف commit.bin في تبويب الملف — وهذا مفيد عند تصحيح مخرجات git cat-file أو التحقق من أن مرآة المستودع لم تُعِد كتابة التاريخ. ملاحظة: Git 2.29+ يدعم وضع SHA-256 (git init --object-format=sha256)، ومنصة GitHub ستنتقل في نهاية المطاف. للمستودعات الجديدة، فضّل وضع SHA-256.
التحقق من بصمة شهادة TLS قديمة
-----BEGIN CERTIFICATE----- MIIDXTCCAkWgAwIBAgIJAKlL... -----END CERTIFICATE-----
قبل 2017، كانت المتصفحات تعرض بصمات الشهادات كسلاسل سداسية SHA-1 من 40 حرفاً. توقفت مراكز إصدار الشهادات عن إصدار شهادات موقّعة بـ SHA-1 في يناير 2016، وأزالت جميع المتصفحات الرئيسية الدعم بحلول مطلع 2017. إذا كنت تدقق شهادة داخلية قديمة أو تتحقق من جهاز IoT إرثي، الصق محتوى PEM هنا لإعادة إنتاج بصمة SHA-1 للمقارنة. المسارات الحديثة تستخدم بصمة SHA-256 من 64 حرفاً بدلاً منها.
التحقق من تنزيل برنامج قديم
node-v0.12.7-linux-x64.tar.gz
بعض أرشيفات البرامج القديمة لا تزال تنشر مجموعاً اختبارياً SHA-1 فقط. بينما يوفر هذا الكشف عن التلف الأساسي (لا عن التلاعب)، إلا أنه أفضل من لا شيء. استخدم تبويب الملف لإفلات الأرشيف، احسب تجزئة SHA-1، ثم قارنها بالقيمة المنشورة من الناشر. إذا كان SHA-256 متاحاً أيضاً، فضّله دائماً. للأرشيفات الجديدة، أصرّ على مجاميع اختبارية بـ SHA-256 أو SHA-512.
عرض توضيحي لتصادم SHAttered
(أفلت ملف shattered-1.pdf من Google/CWI عبر تبويب الملف)
في فبراير 2017 أطلق Google وCWI Amsterdam هجوم SHAttered — أول تصادم عملي لـ SHA-1. أنتجا ملفَّي PDF مختلفَين (shattered-1.pdf وshattered-2.pdf) تنتج عنهما نفس قيمة SHA-1 تحديداً: 38762cf7f55934b34d179ae6a4c80cadccbb7f0a. إفلات أي من الملفين في تبويب الملف بهذه الأداة ينتج نفس التجزئة، مما يثبت أن التصادم حقيقي. هذا العرض هو الدليل الأوضح على سبب كسر SHA-1: وثيقتان مختلفتان بنفس البصمة تعني أن البصمة لم تعد معرّفاً موثوقاً. استخدم SHA-256 لجميع مسارات سلامة الوثائق الجديدة.
كيفية توليد تجزئات SHA-1
- 1
الصق نصاً أو أفلت ملفاً
اختر تبويب النص والصق أي سلسلة نصية — رسالة commit، جسم شهادة، أو مدخل مجموع اختباري إرثي — في منطقة الإدخال. تتحدث تجزئة SHA-1 أثناء الكتابة. للملفات، انتقل إلى تبويب الملف واسحب أي ملف إلى منطقة الإفلات؛ يجزّئه المتصفح محلياً بدون أي رفع.
- 2
انسخ التجزئة من 40 حرفاً
انقر على زر النسخ بجانب مخرج التجزئة. السلسلة السداسية الصغيرة الكاملة من 40 حرفاً تنتقل إلى الحافظة. استخدم تبديل الأحرف الكبيرة إذا كان نظامك الإرثي يتوقع أحرفاً كبيرة — بعض الأدوات القديمة وواجهات Windows تستخدم الأحرف الكبيرة افتراضياً.
- 3
قارن بالبصمة الإرثية
انتقل إلى تبويب المقارنة والصق تجزئتَي SHA-1 جنباً إلى جنب للتأكد من تطابقهما. مفيد للتحقق من مجموع اختباري إرثي من ناشر، أو تدقيق مستودع Git مُعكَس، أو فحص بصمة شهادة TLS قديمة من وثيقة تسبق اعتماد SHA-256.
تفاصيل تقنية
- الخوارزمية: بنية Merkle-Damgård، 80 جولة
- تعالج SHA-1 المدخلات في كتل 512 بت (64 بايت)، تُطبّق 80 جولة من العمليات البتية مجمّعة في أربع مراحل من 20 جولة لكل منها، كل مرحلة بدالة منطقية مختلفة وثابت إضافي. الحالة الأولية هي خمس كلمات 32 بت (A–E)، والتجزئة النهائية هي تسلسل تلك الكلمات بعد الكتلة الأخيرة. محدّدة في FIPS 180-1 (1995)، خُلِفت بـ FIPS 180-4 (2015).
- المخرجات: 160 بت، 40 حرفاً سداسياً
- دائماً 40 حرفاً سداسياً صغيراً بالضبط (160 بت = 20 بايت، مرمّزة بحرفَين سداسيَّين لكل بايت). طول المخرجات ثابت بغض النظر عن حجم المدخلات. مقارنةً بـ 64 حرفاً لـ SHA-256، المخرجات الأقصر توفر بتات أقل من مقاومة التصادم.
- الأداء: سريعة، لكن ذلك جزء من المشكلة
- SHA-1 سريعة — ففي المتصفح عبر Web Crypto تُقارب سرعة SHA-256. للمهاجم، هذه السرعة ميزة: مجموعة وحدات GPU تحسب تجزئات SHA-1 بمعدلات هائلة. هذا هو السبب وراء وجوب عدم استخدام SHA-1 (مثل MD5) لتخزين كلمات المرور — استخدم bcrypt أو scrypt أو Argon2 بدلاً منها.
- المعايير: FIPS 180-1 (1995) — مُهمَلة في سياق FIPS 180-4
- عُيِّرت SHA-1 في FIPS 180-1 (1995). أهملت NIST استخدام SHA-1 للتوقيعات الرقمية في NIST SP 800-131A (2011) وفي FIPS 186-5 (2023) حظرت رسمياً توليد التوقيعات الرقمية بها. لا تزال واجهة W3C WebCrypto API تتضمن SHA-1 لأسباب التوافق الإرثي، وهو ما يُمكّن أداة المتصفح هذه من حسابها.
أفضل الممارسات
- لا تستخدم SHA-1 أبداً للعمليات الحساسة أمنياً
- SHA-1 مُهمَلة للتوقيعات الرقمية وشهادات TLS وتوقيع الكود وتخزين كلمات المرور وأي مسار تهمّ فيه مقاومة التصادم. أثبت هجوم SHAttered عام 2017 تصادمات عملية. لجميع الاستخدامات الأمنية، انتقل إلى SHA-256 أو SHA-3.
- استخدام SHA-1 للبحث في البصمات الإرثية مقبول
- إذا كنت بحاجة للتحقق من مجموع اختباري لملف قبل 2017، أو البحث في معرّف commit في Git، أو فحص بصمة شهادة قديمة لأغراض التدقيق، فـ SHA-1 مناسبة. التجزئة نفسها لا تُستخدم لاتخاذ قرار ثقة — أنت فقط تعيد إنتاج بصمة معروفة كمرجع. وثّق هذا صراحةً في سجلات التدقيق.
- جزّئ دائماً بايتات UTF-8، لا نقاط كود يونيكود
- SHA-1، كجميع خوارزميات التجزئة، تعمل على البايتات لا الأحرف. نفس السلسلة النصية المرمّزة كـ UTF-8 مقابل UTF-16 تنتج تجزئات مختلفة. هذه الأداة دائماً تُرمّز المدخلات كـ UTF-8 بدون BOM قبل التجزئة.
- استخدم المقارنة بالزمن الثابت عند التحقق من التجزئات في الكود
- عند مقارنة تجزئتَي SHA-1 في الكود، استخدم فحص المساواة بالزمن الثابت —
crypto.timingSafeEqual()في Node.js،hmac.compare_digest()في Python — بدلاً من مساواة السلاسل النصية العادية. المقارنة العادية تسرّب معلومات توقيت.
الأسئلة الشائعة حول SHA-1
هل SHA-1 لا يزال آمناً للاستخدام؟
لماذا يستخدم Git SHA-1 حتى الآن؟
هل يجب أن أنتقل من SHA-1 إلى SHA-256؟
ما هو هجوم SHAttered؟
هل يمكن أن تحدث تصادمات SHA-1 عرضياً؟
هل SHA-1 مقبولة للاستخدامات غير الأمنية كالمجاميع الاختبارية؟
كم طول تجزئة SHA-1؟
هل تُرسل مدخلاتي إلى أي خادم؟
crypto.subtle.digest('SHA-1', data)). افتح أدوات المطور ← تبويب الشبكة أثناء التجزئة — ستجد صفر طلبات صادرة. الملفات التي تُفلتها تُقرأ عبر FileReader API وتُجزّأ محلياً؛ البايتات لا تغادر جهازك أبداً. هذا يجعل الأداة آمنة لتجزئة الوثائق السرية وبصمات الشهادات القديمة أو الكود المصدري الخاص. لماذا يختلف مخرج SHA-1 عن sha1sum في سطر الأوامر؟
echo 'hello' | sha1sum يتضمن سطراً جديداً (\n) بعد 'hello'، فيجزّئ 'hello\n' لا 'hello'. استخدم echo -n 'hello' | sha1sum لحذفه. أسباب شائعة أخرى: ترميزات أسطر Windows (\r\n مقابل \n)، أو BOM UTF-8 في بداية الملف، أو اختلافات الترميز (UTF-8 مقابل Latin-1). هذه الأداة تُرمّز المدخلات كـ UTF-8 بدون BOM قبل التجزئة. أدوات ذات صلة
عرض جميع الأدوات →فك تشفير AES — يدعم OpenSSL/CryptoJS
أدوات الأمن
فك تشفير AES أونلاين — GCM/CBC/CTR، عبارة مرور أو مفتاح خام، يكتشف تلقائيًا صيغة OpenSSL وCryptoJS "U2FsdGVkX1". يعمل 100% داخل المتصفح، والمفاتيح لا تغادر الصفحة أبدًا.
أداة تشفير AES — GCM/CBC/CTR
أدوات الأمن
أداة تشفير AES مجانية أونلاين — AES-128/192/256، GCM/CBC/CTR، عبارة مرور (PBKDF2) أو مفتاح خام. تعمل 100% داخل متصفحك؛ لا شيء يُرفع.
مولّد تجزئة bcrypt والتحقق منها
أدوات الأمن
ولّد تجزئات كلمات المرور بـ bcrypt وتحقق منها أونلاين — تكلفة قابلة للضبط، بادئات $2b$/$2a$/$2y$. 100% في متصفحك؛ كلمة مرورك لا تُرفع أبداً.
حاسبة المجموع الاختباري CRC
أدوات الأمن
الصق بيانات ست عشرية أو نصاً واحصل على 63 متغيّراً من CRC-8 وCRC-16 وCRC-32 دفعة واحدة. لديك قيمة تحقق لا تستطيع مطابقتها؟ اكتبها لتسمّي الأداة المتغيّر — MODBUS وCCITT-FALSE وXMODEM وKERMIT. يعمل كلياً داخل متصفحك.
أداة تشفير وفك تشفير DES / 3DES
أدوات الأمن
تشفير وفك تشفير DES/3DES بوضعي ECB/CBC وحشو PKCS#7 في متصفحك. تحقّق صارم من طول المفتاح (8/16/24 بايت) بلا اقتطاع صامت، مع أمر OpenSSL مكافئ لكل نتيجة، ولا يُرفع أي شيء.
مولّد HMAC ومدقّق التوقيع
أدوات الأمن
مولّد ومدقّق HMAC مجاني أونلاين. احسب HMAC-SHA256/SHA1/SHA384/SHA512 بمفاتيح Text أو Hex أو Base64 وإخراج Hex/Base64/Base64URL. كل شيء داخل متصفحك — المفاتيح لا تغادر الصفحة.