SHA-256 generate & verify: checksum file và chữ ký API【2026】

(Cập nhật: 19 tháng 7, 2026 ) SHA-256 hash checksum API signature verify SHA-512 toàn vẹn file
Kết luận

SHA-256 dùng để generate rồi verify — không phải để “giải mã”. Cùng bytes → cùng 64 ký tự hex; lệch 1 bit → digest khác hoàn toàn. File tải về: so checksum vendor. API / webhook: hash đúng chuỗi canonical rồi đối chiếu fixture. Làm nhanh trên trình duyệt (không upload) với công cụ hash SHA-256 Kawa. Cần phân biệt hash với encryption / mật khẩu → Hash ≠ mã hóa.

Khi tích hợp payment gateway, S3 pre-signed URL, hoặc webhook nội bộ, lỗi hay gặp nhất không phải “không biết SHA-256 là gì” — mà là digest của bạn ≠ digest server, dù mắt thường thấy chuỗi gần giống. Freelance / outsource Việt Nam hay mất nửa ngày vì CRLF từ Windows, UTF-8 BOM, hoặc copy thiếu ký tự cuối checksum.

Bài này đi theo góc generate → verify: tạo digest đúng, đối chiếu file và API, và checklist khi lệch. Không lặp bài khái niệm hash vs mã hóa.

Bài viết này giúp bạn

  • Biết độ dài hex của SHA-256 / 384 / 512 và đọc đúng spec
  • Quy trình verify checksum file tải về (CLI + đối chiếu)
  • Debug chữ ký API khi signature mismatch
  • Tránh 6 lỗi bytes ẩn làm đổi digest
  • Dùng hash local làm “nguồn đúng” trước khi đổ lỗi cho thư viện

SHA-256 trong quy trình generate / verify

SHA-256 (Secure Hash Algorithm, 256 bit) là hàm một chiều: input bất kỳ → digest cố định 64 ký tự hex. Không có khóa giải mã. Mục đích thực tế:

Mục tiêuCách dùng SHA-256
Toàn vẹn filePublisher công bố checksum → bạn hash local → so khớp
Fingerprint nội dungCache key, content addressing, Git object (SHA-1 lịch sử; nhiều hệ thống mới dùng SHA-256)
Chữ ký / HMAC bước bămHash chuỗi canonical rồi gắn header (thường kèm HMAC-SHA256)
Fixture unit testCố định input → digest vàng để regression

Không dùng SHA-256 trần để lưu mật khẩu đăng nhập — quá nhanh cho brute-force. Password → Argon2/bcrypt.

Độ dài output — kiểm tra spec trong 5 giây

SHA-2 family: độ dài digest
Thuật toán Bit / hex Khi nào gặp
SHA-256 256 bit / 64 hex Checksum release, nhiều API signature, TLS/cert fingerprint
SHA-384 384 bit / 96 hex Protocol yêu cầu dài hơn SHA-256
SHA-512 512 bit / 128 hex Một số chuẩn nội bộ, JWT/hash dài

Ví dụ cố định (UTF-8, không newline cuối) — dùng làm sanity check tool/CLI:

Input: password123
SHA-256: ef923407a0e3f2d7c698b53ba500ef70004811034445cc85ec0da64290df46cf
SHA-384: 22539697a3e6f7d1c970b52009306499749748790730ed91c48eb7ec22406841297c03846666a6e5f9d82735b061ef98
SHA-512: 1173539937508590107558da93ed600c81cf45ba9ccbc3aee1f0e6d30b0203937998496be1df315101039614661302319002358c3481ed1333ef7a2f40e0d4b9

Mở hash Kawa, gõ password123 — nếu SHA-256 khớp dòng trên, môi trường trình duyệt của bạn tính đúng. Đây là bước “oracle” trước khi debug code riêng.


Verify checksum file tải về

Kịch bản: tải sdk-v2.3.1.zip từ trang vendor hoặc mirror. Trang chính công bố:

SHA-256: a3f1… (64 hex)

Quy trình an toàn

  1. Lấy checksum từ kênh tin cậy (HTTPS vendor), không chỉ từ forum/Telegram.
  2. Hash file local — không giải nén trước nếu checksum của bản zip/tar.
  3. So khớp đủ 64 ký tự (bỏ qua hoa/thường).
  4. Khớp → byte trùng với thứ vendor đã hash. Chưa khớp → tải lại hoặc đổi nguồn; đừng chạy installer.

Lệnh nhanh theo OS

# Linux / macOS / Git Bash
sha256sum sdk-v2.3.1.zip

# Windows PowerShell
Get-FileHash -Algorithm SHA256 .\sdk-v2.3.1.zip

# Windows (certutil)
certutil -hashfile sdk-v2.3.1.zip SHA256

Với chuỗi text nhỏ (manifest, license key tạm, payload JSON) có thể dán vào công cụ hash để lấy SHA-256/384/512 ngay — không cần cài gì, chạy trong trình duyệt.

Giới hạn checksum

Digest khớp không chứng minh “không malware” nếu attacker kiểm soát cả file lẫn trang checksum. Threat model cao → chữ ký GPG / Sigstore / package manager signed. Checksum vẫn rất hữu ích chống tải cụt, mirror lỗi, USB copy hỏng.


Debug chữ ký API khi SHA-256 lệch

Nhiều API yêu cầu: ghép method + path + timestamp + body (hoặc query đã sort) → SHA-256 hoặc HMAC-SHA256 → gắn header X-Signature.

Lỗi 401 “Invalid signature” gần như luôn là chuỗi canonical khác, không phải “Web Crypto hỏng”.

Workflow oracle (giảm thời gian debug)

  1. Đọc spec: delimiter, có/không newline cuối, timezone timestamp, URL-encode hay raw.
  2. Với một bộ param test cố định, tự tay ghép chuỗi canonical trên giấy / editor.
  3. Hash chuỗi đó bằng hash local → ghi digest vàng vào PR / test fixture.
  4. Cho code của bạn in ra chuỗi canonical (không chỉ digest) và so với bước 2 bằng diff.
  5. Chỉ khi chuỗi đã khớp mà digest vẫn lệch mới nghi nhầm thuật toán (SHA-256 vs SHA-512) hoặc encoding.

Ví dụ tối giản (minh họa — không phải spec thật của một vendor):

Canonical: GET\n/v1/orders\n1700000000

Hash SHA-256 chuỗi trên (đúng \n, không \r\n) → lấy 64 hex → so với output crypto.createHash('sha256') hoặc crypto.subtle.digest.

Case study: CRLF từ Windows

Dev trên Windows copy payload từ Notepad → file có \r\n. Spec server dùng LF. Hai chuỗi nhìn giống trong UI, digest hoàn toàn khác. Fix: normalize replace(/\r\n/g, '\n') trước khi hash, hoặc lưu fixture với .gitattributes text eol=lf.

Case study: tiếng Việt / UTF-8

Chuỗi hóa đơn — nếu một bên encode UTF-8, bên kia vô tình UTF-16 hoặc Latin-1, SHA-256 lệch. Với tiếng Việt trong JSON body: luôn Buffer.from(str, 'utf8') / TextEncoder trước khi digest. Paste vào tool trình duyệt cũng dùng UTF-8 — khớp Node/Web Crypto nếu cùng code points.


6 lỗi làm đổi digest (checklist)

Khi SHA-256 không khớp — kiểm tra gì trước
Nguyên nhân Triệu chứng Cách xử lý
CRLF vs LF Giống mắt thường, lệch hex Normalize newline theo spec
Trailing space / \n thừa Copy từ Slack/email Trim có chủ đích; đừng trim nếu spec giữ khoảng trắng
Sai thuật toán 128 hex mà spec bảo SHA-256 Đổi về SHA-256 (64 hex)
Hex hoa/thường So sánh string case-sensitive fail So sánh lowercase hoặc constant-time equal
Thứ tự query a=1&b=2 vs b=2&a=1 Sort key đúng quy tắc vendor
Hash nhầm object JSON đã stringify khác khoảng trắng Hash raw body bytes đã gửi, không hash object đã parse lại

Đưa checklist này vào PR template khi team hay tích hợp webhook — reviewer hỏi “đã so canonical string chưa?” trước khi nghi SDK.


Cách dùng công cụ hash Kawa (local)

  1. Mở /vi/tools/hash/ — không cần đăng ký.
  2. Dán đúng chuỗi canonical hoặc text cần fingerprint (che PII nếu share màn hình).
  3. Sao chép SHA-256 (hoặc 384/512 nếu spec yêu cầu).
  4. Đối chiếu với output code / checksum vendor.

Tool tính trong trình duyệt qua Web Crypto — phù hợp debug nhanh hơn upload chuỗi chứa token lên “hash online” lạ. Giới hạn: input là text; file binary lớn nên dùng sha256sum / Get-FileHash. Không thay Argon2 cho mật khẩu user.


Khi nào đọc bài nào

Nhu cầuBài
Generate / verify SHA-256, debug API & checksumBài này
Hash ≠ encryption, MD5, password hashingHash ≠ mã hóa (SHA-256)
MD5 legacy / “decrypt” mythMD5 hash
Tạo digest ngayCông cụ hash

Liên kết liên quan