Công cụ Xác định Hash

Xác định loại hash theo độ dài và định dạng — MD5, SHA-1, SHA-256 và hơn thế nữa

Chuỗi Hash

Chạy cục bộ · An toàn để dán thông tin bí mật

Nhận Dạng Hash Là Gì?

Nhận dạng hash là quá trình xác định thuật toán băm mật mã nào đã tạo ra một digest cụ thể. Các hàm băm mật mã như MD5, SHA-1 và SHA-256 đều tạo ra đầu ra có độ dài cố định, và độ dài đầu ra là tín hiệu chính được dùng để nhận dạng một hash chưa biết. Khi gặp một chuỗi thập lục phân trong bản dump cơ sở dữ liệu, tệp cấu hình hoặc phản hồi API, công cụ nhận dạng hash sẽ cho biết thuật toán nào có khả năng đã tạo ra nó.

Mỗi thuật toán băm ánh xạ dữ liệu đầu vào tùy ý thành một đầu ra có kích thước cố định gọi là digest. MD5 luôn tạo ra 128 bit (32 ký tự hex), SHA-1 luôn tạo ra 160 bit (40 ký tự hex), và SHA-256 luôn tạo ra 256 bit (64 ký tự hex). Độ dài đầu ra tất định này chính là điều cho phép nhận dạng theo thuật toán mà không cần truy cập vào dữ liệu đầu vào gốc hoặc mã băm.

Nhận dạng chỉ dựa trên độ dài không phải lúc nào cũng chính xác hoàn toàn. Một số thuật toán có cùng kích thước đầu ra — ví dụ, SHA-256 và SHA3-256 đều tạo ra digest hex 64 ký tự. Trong những trường hợp này, công cụ nhận dạng hash cung cấp danh sách các thuật toán ứng viên được xếp hạng theo mức độ phổ biến. Các thông tin ngữ cảnh như hệ thống nguồn, định dạng mã hóa (hex so với Base64), và sự hiện diện của tiền tố thuật toán (như '$2b$' cho bcrypt) sẽ giúp thu hẹp các khả năng.

Tại Sao Nên Dùng Công Cụ Nhận Dạng Hash?

Các hash chưa biết xuất hiện thường xuyên trong quá trình kiểm tra bảo mật, di chuyển cơ sở dữ liệu và phân tích pháp y. Công cụ nhận dạng hash loại bỏ phỏng đoán và chỉ ra thuật toán đúng trong vài giây.

Phát Hiện Tức Thì
Dán hash vào và nhận ngay các thuật toán ứng viên. Không cần đếm ký tự thủ công hay tra bảng tham chiếu — công cụ tự động ánh xạ độ dài hex sang tất cả các thuật toán khớp.
🔒
Phân Tích Ưu Tiên Quyền Riêng Tư
Toàn bộ quá trình nhận dạng chạy hoàn toàn trong trình duyệt của bạn bằng JavaScript. Giá trị hash không bao giờ rời khỏi thiết bị của bạn, điều này quan trọng khi phân tích hash mật khẩu, token xác thực hoặc bằng chứng pháp y nhạy cảm.
📋
Phủ Sóng Thuật Toán Đầy Đủ
Phát hiện MD5, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 và các biến thể SHA-3 tương ứng. Bảng tham chiếu bao gồm toàn bộ họ SHA-2 và SHA-3 cùng các lựa chọn thay thế phổ biến như RIPEMD-160 và BLAKE2.
🚫
Không Cần Tài Khoản Hay Cài Đặt
Hoạt động tức thì trên mọi trình duyệt hiện đại. Không cần đăng ký, không cần API key, không cần cài đặt công cụ CLI. Đánh dấu trang và sử dụng bất cứ khi nào gặp hash chưa biết — trên mọi hệ điều hành, mọi thiết bị.

Các Trường Hợp Sử Dụng Công Cụ Nhận Dạng Hash

Kiểm Tra Bảo Mật
Trong các bài kiểm tra xâm nhập, việc nhận dạng thuật toán băm mật khẩu trong các cơ sở dữ liệu bị rò rỉ sẽ xác định phương pháp bẻ khóa. Hash MD5 và SHA-1 cho thấy bảo vệ yếu và có thể được ưu tiên khắc phục.
Di Chuyển Cơ Sở Dữ Liệu
Khi di chuyển bản ghi người dùng giữa các hệ thống, thuật toán băm mật khẩu được lưu trữ phải được biết để cấu hình đúng lớp xác thực mới. Nhận dạng sai thuật toán khiến tất cả các lần đăng nhập đều thất bại.
DevOps và CI/CD
Các pipeline build thường bao gồm checksum để xác minh artifact. Xác định liệu checksum là SHA-256 hay SHA-512 đảm bảo bạn sử dụng lệnh xác minh đúng trong script triển khai.
Pháp Y Kỹ Thuật Số
Các điều tra viên pháp y gặp digest hash trong nhật ký toàn vẹn tệp, bản ghi blockchain và siêu dữ liệu bằng chứng. Nhận dạng thuật toán là điều kiện tiên quyết để xác minh chuỗi bảo quản bằng chứng.
Tích Hợp API
Các API bên thứ ba đôi khi trả về giá trị hash mà không ghi lại thuật toán. Nhận dạng loại hash từ phản hồi cho phép cấu hình đúng xác minh chữ ký webhook hoặc kiểm tra checksum.
Học Mật Mã Học
Sinh viên theo học các khóa mật mã học có thể dán hash được tạo bởi các thuật toán khác nhau và ngay lập tức thấy mối quan hệ giữa lựa chọn thuật toán, độ dài đầu ra và các thuộc tính bảo mật.

Bảng Tham Chiếu Độ Dài Thuật Toán Hash

Bảng dưới đây ánh xạ từng thuật toán băm phổ biến sang kích thước đầu ra tính bằng bit, ký tự hex và byte thô. Đây là bảng tra cứu chính được sử dụng bởi các công cụ nhận dạng hash. Khi nhiều thuật toán có cùng độ dài hex, bạn cần thêm ngữ cảnh để phân biệt chúng.

Thuật ToánBitKý Tự HexByteGhi Chú
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

Phân Biệt Các Độ Dài Hash Trùng Nhau

Một số độ dài hex khớp với nhiều thuật toán. Hai trường hợp mơ hồ phổ biến nhất là hash 64 ký tự (SHA-256 so với SHA3-256) và hash 40 ký tự (SHA-1 so với RIPEMD-160). Đây là cách phân biệt khi độ dài đơn thuần không đủ.

64 ký tự hex: SHA-256 so với SHA3-256
Cả hai đều tạo ra digest 256-bit (64 ký tự). SHA-256 phổ biến hơn rất nhiều trong thực tế — commit Git, chứng chỉ TLS, khối Bitcoin và hầu hết chữ ký API đều dùng SHA-256. SHA3-256 thường chỉ xuất hiện trong các hệ thống yêu cầu rõ ràng tuân thủ NIST SP 800-185 hoặc các cấu trúc dựa trên Keccak. Hãy kiểm tra tài liệu của hệ thống nguồn để xác nhận.
40 ký tự hex: SHA-1 so với RIPEMD-160
SHA-1 là hash 160-bit phổ biến hơn nhiều — được dùng trong lịch sử trong Git (trước khi chuyển sang SHA-256), TLS và ký mã. RIPEMD-160 chủ yếu xuất hiện trong việc tạo địa chỉ Bitcoin (HASH160 = SHA-256 theo sau bởi RIPEMD-160). Nếu hash đến từ bối cảnh tiền mã hóa, hãy xem xét RIPEMD-160; nếu không, SHA-1 là ứng viên có khả năng cao hơn.

Ví Dụ Mã Nguồn

Dưới đây là các triển khai hoạt động của nhận dạng hash theo độ dài hex trong bốn ngôn ngữ. Mỗi hàm kiểm tra mã hóa hex, tra cứu số ký tự và trả về tất cả các thuật toán khớp.

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)

Câu Hỏi Thường Gặp

Nhận dạng hash hoạt động như thế nào?
Nhận dạng hash chủ yếu dựa vào độ dài của digest được mã hóa hex. Mỗi thuật toán băm tạo ra một số bit đầu ra cố định: MD5 tạo ra 128 bit (32 ký tự hex), SHA-1 tạo ra 160 bit (40 ký tự hex), SHA-256 tạo ra 256 bit (64 ký tự hex), và tiếp tục như vậy. Công cụ đo độ dài chuỗi, xác minh chỉ chứa ký tự thập lục phân, và ánh xạ sang kích thước đầu ra của các thuật toán đã biết.
Công cụ nhận dạng hash có thể xác định chính xác thuật toán một cách chắc chắn không?
Không phải lúc nào cũng vậy. Nhiều thuật toán có thể tạo ra cùng độ dài đầu ra. SHA-256 và SHA3-256 đều tạo ra 64 ký tự hex. SHA-1 và RIPEMD-160 đều tạo ra 40 ký tự hex. Trong những trường hợp này, công cụ trả về tất cả các ứng viên. Bạn cần ngữ cảnh — hệ thống nguồn, tài liệu hoặc tiền tố thuật toán — để thu hẹp xuống một thuật toán duy nhất.
Nếu hash của tôi được mã hóa Base64 thay vì hex thì sao?
Các hash được mã hóa Base64 sử dụng bộ ký tự khác (A-Z, a-z, 0-9, +, /) và có độ dài khác so với tương đương hex của chúng. Một hash 256-bit có 44 ký tự Base64 nhưng 64 ký tự hex. Hãy giải mã chuỗi Base64 thành byte thô trước, sau đó kiểm tra độ dài byte: 16 byte = MD5, 20 byte = SHA-1, 32 byte = SHA-256, 48 byte = SHA-384, 64 byte = SHA-512.
Có an toàn khi dán hash mật khẩu vào công cụ nhận dạng trực tuyến không?
Công cụ này chạy hoàn toàn trong trình duyệt của bạn — không có dữ liệu nào được truyền đến bất kỳ máy chủ nào. Hash không bao giờ rời khỏi thiết bị của bạn. Tuy nhiên, để đảm bảo bảo mật tối đa trong một cuộc kiểm tra chính thức, bạn có thể xác minh điều này bằng cách kiểm tra tab mạng trong công cụ phát triển của trình duyệt hoặc sử dụng công cụ ngoại tuyến sau khi trang đã tải.
Tại sao MD5 vẫn được sử dụng nếu nó đã bị phá vỡ về mặt mật mã?
MD5 đã bị phá vỡ về khả năng chống va chạm — kẻ tấn công có thể tạo ra hai đầu vào khác nhau tạo ra cùng một hash. Tuy nhiên, MD5 vẫn được dùng trong các bối cảnh phi bảo mật: checksum tệp để xác minh tải xuống, khóa cache, loại bỏ trùng lặp và ETag trong HTTP. Với những mục đích này, va chạm ngẫu nhiên cực kỳ khó xảy ra và các cuộc tấn công có chủ đích không phải mối quan tâm. MD5 không được dùng để băm mật khẩu, chữ ký số hoặc xác minh chứng chỉ.
Làm thế nào để nhận dạng hash bcrypt, scrypt hoặc Argon2?
Các hàm băm mật khẩu như bcrypt, scrypt và Argon2 sử dụng tiền tố chuỗi đặc trưng thay vì đầu ra hex thô. Hash bcrypt bắt đầu bằng '$2a$', '$2b$' hoặc '$2y$' theo sau là hệ số chi phí. Hash Argon2 bắt đầu bằng '$argon2id$' hoặc '$argon2i$'. Hash scrypt thường bắt đầu bằng '$scrypt$'. Đây không phải là digest mật mã thô, vì vậy nhận dạng dựa trên độ dài không áp dụng — chính tiền tố nhận dạng thuật toán.
Sự khác biệt giữa SHA-2 và SHA-3 là gì?
SHA-2 (bao gồm SHA-256, SHA-384 và SHA-512) dựa trên cấu trúc Merkle-Damgard được thiết kế bởi NSA và được chuẩn hóa trong FIPS 180-4. SHA-3 (SHA3-256, SHA3-384, SHA3-512) dựa trên cấu trúc xốp Keccak, được chọn qua một cuộc thi NIST công khai và được chuẩn hóa trong FIPS 202. Chúng tạo ra các độ dài đầu ra giống nhau ở các mức bảo mật tương ứng nhưng sử dụng cấu trúc nội bộ hoàn toàn khác nhau. SHA-3 được thiết kế như một phương án dự phòng trong trường hợp phát hiện điểm yếu cấu trúc trong SHA-2, mặc dù chưa có điểm yếu nào như vậy được chứng minh.