ToolDeck

شناسه‌ی Hash

شناخت نوع هش بر اساس طول و فرمت — MD5، SHA-1، SHA-256 و غیره

رشته Hash

به‌صورت محلی اجرا می‌شود · جای‌گذاری اسرار امن است

شناسایی هش چیست؟

شناسایی هش فرآیند تشخیص این است که کدام الگوریتم رمزنگاری هش یک خلاصه‌پیام (digest) مشخص را تولید کرده است. توابع هش رمزنگاری مانند MD5، SHA-1 و SHA-256 هر کدام خروجی‌هایی با طول ثابت تولید می‌کنند و طول خروجی نشانه اصلی برای شناسایی یک هش ناشناخته است. وقتی با یک رشته شانزده‌شانزدهی در یک dump پایگاه داده، فایل پیکربندی یا پاسخ API مواجه می‌شوید، ابزار شناسایی هش به شما می‌گوید کدام الگوریتم احتمالاً آن را تولید کرده است.

هر الگوریتم هش داده‌های ورودی دلخواه را به یک خروجی با اندازه ثابت به نام خلاصه‌پیام (digest) نگاشت می‌کند. MD5 همیشه ۱۲۸ بیت (۳۲ کاراکتر hex) تولید می‌کند، SHA-1 همیشه ۱۶۰ بیت (۴۰ کاراکتر hex) و SHA-256 همیشه ۲۵۶ بیت (۶۴ کاراکتر hex) تولید می‌کند. این طول خروجی قطعی است که شناسایی الگوریتمی را بدون دسترسی به ورودی اصلی یا کد هش‌سازی ممکن می‌سازد.

شناسایی بر اساس طول به تنهایی همیشه قطعی نیست. چندین الگوریتم اندازه خروجی یکسانی دارند — برای مثال SHA-256 و SHA3-256 هر دو خلاصه‌پیام‌های hex با ۶۴ کاراکتر تولید می‌کنند. در این موارد، یک ابزار شناسایی هش فهرستی از الگوریتم‌های کاندید را بر اساس فراوانی ارائه می‌دهد. نشانه‌های محیطی مانند سیستم منبع، قالب رمزگذاری (hex در برابر Base64) و وجود پیشوندهای الگوریتمی (مانند '$2b$' برای bcrypt) احتمالات را بیشتر محدود می‌کنند.

چرا از ابزار شناسایی هش استفاده کنیم؟

هش‌های ناشناخته در طول ممیزی‌های امنیتی، مهاجرت پایگاه داده و تحلیل جنایی به طور مرتب ظاهر می‌شوند. یک ابزار شناسایی هش حدس و گمان را حذف کرده و در چند ثانیه شما را به الگوریتم صحیح هدایت می‌کند.

تشخیص فوری
یک هش را جای‌گذاری کنید و بلافاصله الگوریتم‌های کاندید را دریافت کنید. نیازی به شمارش دستی کاراکترها یا مراجعه به جداول مرجع نیست — ابزار طول hex را به صورت خودکار به تمام الگوریتم‌های مطابق نگاشت می‌کند.
🔒
تحلیل با اولویت حریم خصوصی
تمام شناسایی‌ها کاملاً در مرورگر شما با استفاده از JavaScript انجام می‌شود. مقدار هش هرگز دستگاه شما را ترک نمی‌کند، که هنگام تحلیل هش‌های رمز عبور، توکن‌های احراز هویت یا شواهد جنایی حساس اهمیت دارد.
📋
پوشش کامل الگوریتم‌ها
MD5، SHA-1، SHA-224، SHA-256، SHA-384، SHA-512 و همتایان SHA-3 آن‌ها را تشخیص می‌دهد. جدول مرجع کل خانواده‌های SHA-2 و SHA-3 به علاوه جایگزین‌های رایج مانند RIPEMD-160 و BLAKE2 را پوشش می‌دهد.
🚫
بدون حساب کاربری یا نصب
در هر مرورگر مدرنی فوری کار می‌کند. بدون ثبت‌نام، بدون کلید API، بدون نصب ابزار CLI. آن را بوک‌مارک کنید و هر زمان با هش ناشناخته‌ای مواجه شدید از آن استفاده کنید — در هر سیستم‌عامل و هر دستگاهی.

موارد استفاده از ابزار شناسایی هش

ممیزی امنیتی
در طول تست‌های نفوذ، شناسایی الگوریتم‌های هش رمز عبور در پایگاه‌های داده لو رفته رویکرد شکستن را تعیین می‌کند. هش‌های MD5 و SHA-1 نشان‌دهنده حفاظت ضعیف هستند و می‌توان آن‌ها را برای اصلاح در اولویت قرار داد.
مهاجرت پایگاه داده
هنگام مهاجرت رکوردهای کاربران بین سیستم‌ها، الگوریتم هش رمز عبور ذخیره‌شده باید برای پیکربندی صحیح لایه احراز هویت جدید شناخته شود. اشتباه در شناسایی الگوریتم باعث می‌شود تمام ورودها ناموفق باشند.
DevOps و CI/CD
خطوط ساخت اغلب شامل checksum‌هایی برای تأیید artifact هستند. شناسایی اینکه آیا یک checksum از نوع SHA-256 یا SHA-512 است، تضمین می‌کند که دستور تأیید صحیح را در اسکریپت‌های استقرار خود استفاده کنید.
پزشکی قانونی دیجیتال
کارشناسان پزشکی قانونی با خلاصه‌پیام‌های هش در گزارش‌های یکپارچگی فایل، رکوردهای blockchain و متادیتای شواهد مواجه می‌شوند. شناسایی الگوریتم پیش‌نیاز تأیید زنجیره حضانت شواهد است.
یکپارچه‌سازی API
API‌های شخص ثالث گاهی اوقات مقادیر هش را بدون مستندسازی الگوریتم برمی‌گردانند. شناسایی نوع هش از پاسخ به شما امکان می‌دهد تأیید امضای webhook یا اعتبارسنجی checksum را به درستی پیکربندی کنید.
یادگیری رمزنگاری
دانشجویانی که دوره‌های رمزنگاری می‌گذرانند می‌توانند هش‌های تولیدشده توسط الگوریتم‌های مختلف را جای‌گذاری کنند و فوری رابطه بین انتخاب الگوریتم، طول خروجی و ویژگی‌های امنیتی را ببینند.

جدول مرجع طول الگوریتم‌های هش

جدول زیر هر الگوریتم هش رایج را به اندازه خروجی آن بر حسب بیت، کاراکتر hex و بایت خام نگاشت می‌کند. این جدول جستجوی اصلی مورد استفاده ابزارهای شناسایی هش است. وقتی چندین الگوریتم طول hex یکسانی دارند، به زمینه اضافی برای تمایز آن‌ها نیاز دارید.

الگوریتمبیتکاراکتر Hexبایتیادداشت‌ها
MD51283216Broken — collisions trivial since 2004
SHA-11604020Deprecated — SHAttered attack (2017)
SHA-2242245628Truncated SHA-256; rarely used standalone
SHA-2562566432Current standard; TLS, Git, Bitcoin
SHA-3843849648Truncated SHA-512; CNSA Suite approved
SHA-51251212864Maximum SHA-2 output; large-data hashing
SHA3-2562566432Keccak-based; NIST alternative to SHA-2
SHA3-51251212864Keccak-based; highest SHA-3 strength
RIPEMD-1601604020Used in Bitcoin address derivation
BLAKE2s2566432Faster than SHA-256; 256-bit output

رفع ابهام از طول‌های هش

برخی طول‌های hex با چندین الگوریتم مطابقت دارند. دو ابهام رایج‌تر هش‌های ۶۴ کاراکتری (SHA-256 در مقابل SHA3-256) و هش‌های ۴۰ کاراکتری (SHA-1 در مقابل RIPEMD-160) هستند. در اینجا نحوه تمایز آن‌ها را هنگامی که طول به تنهایی کافی نیست توضیح می‌دهیم.

۶۴ کاراکتر hex: SHA-256 در مقابل SHA3-256
هر دو خلاصه‌پیام‌های ۲۵۶ بیتی (۶۴ کاراکتری) تولید می‌کنند. SHA-256 در عمل به مراتب رایج‌تر است — commit‌های Git، گواهینامه‌های TLS، بلوک‌های Bitcoin و اکثر امضاهای API از SHA-256 استفاده می‌کنند. SHA3-256 معمولاً تنها در سیستم‌هایی یافت می‌شود که صریحاً به انطباق NIST SP 800-185 یا ساختارهای مبتنی بر Keccak نیاز دارند. برای تأیید، مستندات سیستم منبع را بررسی کنید.
۴۰ کاراکتر hex: SHA-1 در مقابل RIPEMD-160
SHA-1 هش ۱۶۰ بیتی بسیار رایج‌تر است — به طور تاریخی در Git (قبل از انتقال به SHA-256)، TLS و امضای کد استفاده می‌شد. RIPEMD-160 عمدتاً در تولید آدرس Bitcoin ظاهر می‌شود (HASH160 = SHA-256 به دنبال آن RIPEMD-160). اگر هش از یک زمینه ارز دیجیتال می‌آید، RIPEMD-160 را در نظر بگیرید؛ در غیر این صورت SHA-1 کاندید محتمل‌تر است.

نمونه‌های کد

در زیر پیاده‌سازی‌های کاربردی شناسایی هش بر اساس طول hex در چهار زبان آورده شده است. هر تابع رمزگذاری hex را اعتبارسنجی می‌کند، تعداد کاراکترها را جستجو می‌کند و تمام الگوریتم‌های مطابق را برمی‌گرداند.

JavaScript
function identifyHash(hex) {
  const len = hex.length
  const isHex = /^[0-9a-fA-F]+$/.test(hex)
  if (!isHex) return ['Not a hex-encoded hash']

  const map = {
    32:  ['MD5'],
    40:  ['SHA-1', 'RIPEMD-160'],
    56:  ['SHA-224', 'SHA3-224'],
    64:  ['SHA-256', 'SHA3-256', 'BLAKE2s'],
    96:  ['SHA-384', 'SHA3-384'],
    128: ['SHA-512', 'SHA3-512', 'BLAKE2b'],
  }
  return map[len] || [`Unknown (${len} hex chars)`]
}

identifyHash('d41d8cd98f00b204e9800998ecf8427e')
// → ["MD5"]

identifyHash('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855')
// → ["SHA-256", "SHA3-256", "BLAKE2s"]
Python
import re

HASH_LENGTHS = {
    32:  ['MD5'],
    40:  ['SHA-1', 'RIPEMD-160'],
    56:  ['SHA-224', 'SHA3-224'],
    64:  ['SHA-256', 'SHA3-256', 'BLAKE2s'],
    96:  ['SHA-384', 'SHA3-384'],
    128: ['SHA-512', 'SHA3-512', 'BLAKE2b'],
}

def identify_hash(hex_string: str) -> list[str]:
    hex_string = hex_string.strip()
    if not re.fullmatch(r'[0-9a-fA-F]+', hex_string):
        return ['Not a hex-encoded hash']
    return HASH_LENGTHS.get(len(hex_string), [f'Unknown ({len(hex_string)} hex chars)'])

identify_hash('da39a3ee5e6b4b0d3255bfef95601890afd80709')
# → ['SHA-1', 'RIPEMD-160']

identify_hash('a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a')
# → ['SHA-256', 'SHA3-256', 'BLAKE2s']
Go
package main

import (
	"fmt"
	"regexp"
)

var hexPattern = regexp.MustCompile("^[0-9a-fA-F]+$")

var hashLengths = map[int][]string{
	32:  {"MD5"},
	40:  {"SHA-1", "RIPEMD-160"},
	56:  {"SHA-224", "SHA3-224"},
	64:  {"SHA-256", "SHA3-256", "BLAKE2s"},
	96:  {"SHA-384", "SHA3-384"},
	128: {"SHA-512", "SHA3-512", "BLAKE2b"},
}

func identifyHash(hex string) []string {
	if !hexPattern.MatchString(hex) {
		return []string{"Not a hex-encoded hash"}
	}
	if algos, ok := hashLengths[len(hex)]; ok {
		return algos
	}
	return []string{fmt.Sprintf("Unknown (%d hex chars)", len(hex))}
}

func main() {
	fmt.Println(identifyHash("d41d8cd98f00b204e9800998ecf8427e"))
	// → [MD5]
}
CLI (Bash)
#!/bin/bash
# Identify a hash from the command line by character count
hash="$1"

if [[ ! "$hash" =~ ^[0-9a-fA-F]+$ ]]; then
  echo "Not a hex-encoded hash"
  exit 1
fi

len=${#hash}
case $len in
  32)  echo "MD5 (128-bit)" ;;
  40)  echo "SHA-1 or RIPEMD-160 (160-bit)" ;;
  56)  echo "SHA-224 or SHA3-224 (224-bit)" ;;
  64)  echo "SHA-256 or SHA3-256 (256-bit)" ;;
  96)  echo "SHA-384 or SHA3-384 (384-bit)" ;;
  128) echo "SHA-512 or SHA3-512 (512-bit)" ;;
  *)   echo "Unknown hash length: $len chars" ;;
esac

# Usage: ./identify.sh d41d8cd98f00b204e9800998ecf8427e
# → MD5 (128-bit)

سؤالات متداول

شناسایی هش چگونه کار می‌کند؟
شناسایی هش در درجه اول بر طول خلاصه‌پیام کدگذاری‌شده با hex متکی است. هر الگوریتم هش تعداد ثابتی از بیت‌های خروجی تولید می‌کند: MD5 خروجی ۱۲۸ بیتی (۳۲ کاراکتر hex)، SHA-1 خروجی ۱۶۰ بیتی (۴۰ کاراکتر hex)، SHA-256 خروجی ۲۵۶ بیتی (۶۴ کاراکتر hex) و به همین ترتیب. شناساگر طول رشته را اندازه‌گیری می‌کند، تأیید می‌کند که تنها شامل کاراکترهای شانزده‌شانزدهی است و آن را به اندازه‌های خروجی الگوریتم‌های شناخته‌شده نگاشت می‌کند.
آیا یک ابزار شناسایی هش می‌تواند الگوریتم دقیق را با قطعیت تعیین کند؟
نه همیشه. چندین الگوریتم می‌توانند طول خروجی یکسانی داشته باشند. SHA-256 و SHA3-256 هر دو ۶۴ کاراکتر hex خروجی می‌دهند. SHA-1 و RIPEMD-160 هر دو ۴۰ کاراکتر hex خروجی می‌دهند. در این موارد، ابزار تمام کاندیدها را برمی‌گرداند. برای محدود کردن به یک الگوریتم واحد به زمینه — سیستم منبع، مستندات یا پیشوندهای الگوریتمی — نیاز دارید.
اگر هش من به جای hex با Base64 کدگذاری شده باشد چه؟
هش‌های کدگذاری‌شده با Base64 از مجموعه کاراکتر متفاوتی (A-Z، a-z، 0-9، +، /) استفاده می‌کنند و طول‌های متفاوتی نسبت به معادل‌های hex آن‌ها دارند. یک هش ۲۵۶ بیتی ۴۴ کاراکتر Base64 اما ۶۴ کاراکتر hex است. ابتدا رشته Base64 را به بایت‌های خام تبدیل کنید، سپس طول بایت را بررسی کنید: ۱۶ بایت = MD5، ۲۰ بایت = SHA-1، ۳۲ بایت = SHA-256، ۴۸ بایت = SHA-384، ۶۴ بایت = SHA-512.
آیا جای‌گذاری هش‌های رمز عبور در یک شناساگر آنلاین امن است؟
این ابزار کاملاً در مرورگر شما اجرا می‌شود — هیچ داده‌ای به هیچ سروری ارسال نمی‌شود. هش هرگز دستگاه شما را ترک نمی‌کند. با این حال، برای حداکثر امنیت عملیاتی در طول یک ممیزی رسمی، می‌توانید با بررسی تب شبکه در ابزارهای توسعه‌دهنده مرورگر خود یا استفاده از ابزار به صورت آفلاین پس از بارگذاری صفحه، این را تأیید کنید.
چرا MD5 هنوز استفاده می‌شود در حالی که از نظر رمزنگاری شکسته شده است؟
MD5 از نظر مقاومت در برابر تصادم شکسته شده است — یک مهاجم می‌تواند دو ورودی متفاوت ایجاد کند که هش یکسانی تولید کنند. با این حال، MD5 هنوز در زمینه‌های غیرامنیتی استفاده می‌شود: checksum فایل برای تأیید دانلود، کلیدهای کش، حذف تکراری‌ها و ETagها در HTTP. برای این اهداف، تصادم‌های اتفاقی به طور نجومی بعید هستند و حملات عمدی نگرانی‌ای ایجاد نمی‌کنند. MD5 نباید برای هش‌سازی رمز عبور، امضاهای دیجیتال یا تأیید گواهینامه استفاده شود.
چگونه هش‌های bcrypt، scrypt یا Argon2 را شناسایی کنم؟
توابع هش‌سازی رمز عبور مانند bcrypt، scrypt و Argon2 به جای خروجی hex خام از پیشوندهای رشته‌ای مشخص استفاده می‌کنند. هش‌های bcrypt با '$2a$'، '$2b$' یا '$2y$' به دنبال یک عامل هزینه شروع می‌شوند. هش‌های Argon2 با '$argon2id$' یا '$argon2i$' شروع می‌شوند. هش‌های scrypt معمولاً با '$scrypt$' شروع می‌شوند. اینها خلاصه‌پیام‌های رمزنگاری خام نیستند، بنابراین شناسایی مبتنی بر طول اعمال نمی‌شود — پیشوند خود الگوریتم را شناسایی می‌کند.
تفاوت بین SHA-2 و SHA-3 چیست؟
SHA-2 (که شامل SHA-256، SHA-384 و SHA-512 می‌شود) بر اساس ساختار Merkle-Damgard طراحی‌شده توسط NSA و استانداردشده در FIPS 180-4 است. SHA-3 (SHA3-256، SHA3-384، SHA3-512) بر اساس ساختار اسفنجی Keccak است که از طریق یک رقابت عمومی NIST انتخاب شده و در FIPS 202 استانداردسازی شده است. آن‌ها در سطوح امنیتی یکسان طول خروجی یکسانی تولید می‌کنند اما از ساختارهای داخلی کاملاً متفاوتی استفاده می‌کنند. SHA-3 به عنوان یک جایگزین در صورت کشف ضعف‌های ساختاری در SHA-2 طراحی شده، هرچند تاکنون چنین ضعف‌هایی نشان داده نشده است.