Tạo mã băm SHA-256

Tính giá trị băm SHA-256 của văn bản, byte hex hoặc bất kỳ tệp nào bằng Web Crypto API ngay trong trình duyệt. Dán tổng kiểm tra được công bố vào ô So sánh với để kiểm tra tệp tải về.

Tất cả thuật toán

Chạy hoàn toàn trong trình duyệt của bạn. Không có gì được tải lên.

Cách sử dụng

  1. Nhập hoặc dán văn bản, chuyển Đầu vào dạng sang Hex để nhập byte hex, hoặc nhấp Mở tệp để chọn tệp bạn muốn kiểm tra.
  2. Giữ SHA-256 trong ô Thuật toán và chọn Đầu ra dạng hex (chữ thường), HEX (chữ hoa) hoặc Base64.
  3. Dán tổng kiểm tra từ trang tải về vào ô So sánh với. Khớp nghĩa là tệp giống hệt bản gốc.
  4. Sao chép kết quả, hoặc sao chép SHA-384, SHA-512 hay một giá trị băm khác từ bảng Tất cả thuật toán.

SHA-256 là gì?

SHA-256 là thành viên được dùng rộng rãi nhất của họ SHA-2, do NSA thiết kế và được NIST chuẩn hóa năm 2002 trong FIPS 180-2. Ngày nay thuật toán được đặc tả trong FIPS 180-4, còn RFC 6234 trình bày các thuật toán đó kèm mã tham chiếu. SHA-256 xử lý các khối 512 bit qua 64 vòng tính toán số học 32 bit và cho ra giá trị băm dài 256 bit: 64 ký tự hex hoặc 44 ký tự Base64. Hiện chưa có cách tấn công va chạm hay tấn công tiền ảnh (preimage) thực tế nào được biết đến, và đây là lựa chọn mặc định cho:

  • chứng chỉ TLS và quá trình bắt tay, cùng với việc ký mã (code signing);
  • Bitcoin, vốn áp dụng SHA-256 hai lần cho mã băm khối, bằng chứng công việc (proof of work) và ID giao dịch (tổng kiểm tra trong địa chỉ Base58Check cũng lấy từ phép băm kép này);
  • các tệp tổng kiểm tra như SHA256SUMS, giá trị băm của image container (sha256:...) và Subresource Integrity.

Kiểm tra tệp tải về

Mở tệp đã tải về và dán tổng kiểm tra của nhà phát hành vào ô So sánh với. Chữ hoa hay chữ thường không quan trọng, và giá trị Base64 cũng dùng được. Khớp nghĩa là tệp giống đến từng byte với tệp đã được dùng để tạo tổng kiểm tra. Điều này không chứng minh ai đã tạo ra tệp, vì vậy hãy lấy tổng kiểm tra từ trang HTTPS của nhà phát hành hoặc từ tệp SHA256SUMS đã được ký, chứ đừng lấy từ máy chủ mirror đã cung cấp bản tải về.

Với văn bản, mã băm được tính trên byte chứ không phải trên ký tự. Ký tự xuống dòng kiểu Windows (CRLF), dấu thứ tự byte (BOM) hoặc việc dùng UTF-16 thay cho UTF-8 đều tạo ra một mã băm SHA-256 hoàn toàn khác. Hãy dùng ô chọn Bảng mã hoặc đầu vào hex để băm đúng những byte mà hệ thống kia đã băm.

Tấn công mở rộng độ dài và mật khẩu

Giống MD5, SHA-1 và SHA-512, SHA-256 dễ bị tấn công mở rộng độ dài (length extension): khi biết SHA-256(secret + message) và độ dài của khóa bí mật, kẻ tấn công có thể tính ra mã băm hợp lệ cho chính thông điệp đó nối thêm phần đệm và dữ liệu tùy ý, mà không cần biết khóa bí mật. Để ký hoặc xác thực dữ liệu bằng khóa, hãy dùng HMAC-SHA256 từ công cụ tạo HMAC thay vì băm chung khóa và thông điệp.

Tốc độ cũng là lý do dùng SHA-256 thuần để lưu mật khẩu là sai cách: bất kỳ ai lấy được các mã băm đều có thể thử đoán nhanh ngang tốc độ card đồ họa của họ tính SHA-256, và các mật khẩu giống nhau sẽ cho ra mã băm giống nhau. Hãy dùng Argon2id, scrypt, bcrypt hoặc PBKDF2-HMAC-SHA256 với số vòng lặp cao; tất cả các thuật toán này đều thêm salt.

SHA-256 trên dòng lệnh và trong mã nguồn

$ printf 'abc' | sha256sum
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad  -

sha256sum -c SHA256SUMS                  # Linux: kiểm tra một danh sách tệp
shasum -a 256 file.iso                   # macOS
certutil -hashfile file.iso SHA256       # Windows
Get-FileHash file.iso                    # PowerShell (mặc định là SHA256)

# Python
hashlib.sha256(data).hexdigest()

// Node.js
crypto.createHash('sha256').update(data).digest('hex')

Giá trị của abc là vector kiểm thử trong tiêu chuẩn; hãy nhập abc vào ô phía trên để thấy cùng kết quả. Bảng Tất cả thuật toán cũng liệt kê các giá trị SHA-384, SHA-512, SHA-1, MD5 và CRC cho đầu vào của bạn.

Ví dụ

Đầu vào (UTF-8)SHA-256
Hello, World!dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f
Base64.is63f2f446bc11a1f96175c0f77bdac08ca1b184ba42c3a42c34ddcbce00b1b800
你好670d9743542cae3ea7ebe36af56bd53648b0a1126162e78d81a32934a711302e

Câu hỏi thường gặp

SHA-256 có giải mã được không?

Không. SHA-256 là hàm băm một chiều, không phải mã hóa bảo mật. Các "công cụ giải mã" trực tuyến chỉ tra mã băm trong bảng chứa những đầu vào đã biết, nên chúng tìm được mật khẩu phổ biến và chuỗi ngắn, nhưng không tìm được dữ liệu dài hoặc ngẫu nhiên.

Vì sao mã băm SHA-256 của tôi không khớp với tổng kiểm tra được công bố?

Thường gặp nhất là tệp tải về chưa đầy đủ hoặc là một phiên bản khác, hoặc bạn đã băm tên tệp thay vì chính tệp. Hãy nạp chính tệp đó bằng nút Mở tệp. Ngoài ra, hãy kiểm tra xem hai giá trị có dùng cùng một thuật toán không: giá trị hex dài 128 ký tự đến từ hàm băm 512 bit như SHA-512, không phải từ SHA-256.

Làm sao để lấy mã băm SHA-256 ở dạng Base64?
Đặt Đầu ra dạng thành Base64. Subresource Integrity (giá trị sha256-, dù sha384- phổ biến hơn) và header HTTP Content-Digest dùng dạng này. Hex và Base64 chứa cùng 32 byte; bạn có thể chuyển đổi giữa hai dạng bằng Base64 sang Hex.
SHA-256 có giống SHA-2 không?

SHA-2 là một họ hàm băm: SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 và SHA-512/256. SHA-256 là thành viên phổ biến nhất của họ này. SHA-3 (FIPS 202) là một thiết kế riêng dựa trên Keccak và cho kết quả khác.

Mã băm SHA-256 dài bao nhiêu?
32 byte: 64 ký tự hex hoặc 44 ký tự Base64 kết thúc bằng =. SHA3-256 và BLAKE2s có cùng độ dài; công cụ nhận dạng mã băm liệt kê những khả năng như vậy cho một mã băm chưa rõ nguồn gốc.