Mã hóa & Giải mã AES
Nhập văn bản + mật khẩu → Nhấn Mã hóa/Giải mã → Sao chép kết quả. AES-256-GCM, hoàn toàn trên trình duyệt.
GCM, CBC, CTR — ưu nhược điểm
| Chế độ | Xác thực | IV | Song song |
|---|---|---|---|
| GCM | Tích hợp | 12 byte | Có |
| CBC | Không (thêm HMAC) | 16 byte | Chỉ giải mã |
| CTR | Không (thêm HMAC) | 16 byte (nonce) | Có |
Mã hóa AES-256-GCM trong các ngôn ngữ phổ biến
Quản lý khóa, IV và các lỗi phổ biến
Tối thiểu 12 ký tự gồm chữ hoa, chữ thường, số và ký tự đặc biệt. Độ mạnh mật khẩu quyết định trực tiếp bảo mật mã hóa.
Mỗi lần mã hóa phải dùng vector khởi tạo (IV) duy nhất. Tái sử dụng IV với cùng khóa sẽ phá hoàn toàn bảo mật GCM.
Không bao giờ dùng mật khẩu trực tiếp làm khóa AES. Tạo khóa bằng PBKDF2 (100k+ vòng lặp) hoặc Argon2id để chống brute-force.
GCM tự động xác thực. Với CBC/CTR, luôn thêm HMAC-SHA256 để phát hiện giả mạo.
Không lưu khóa trong mã nguồn hoặc biến môi trường dạng văn bản. Dùng dịch vụ quản lý khóa (AWS KMS, GCP KMS, HashiCorp Vault).
Đặt lịch xoay vòng khóa. Mã hóa lại dữ liệu với khóa mới. Giữ khóa cũ để giải mã trong giai đoạn chuyển tiếp.
AES Encryption là gì?
AES (Advanced Encryption Standard) là thuật toán mã hóa đối xứng được Viện Tiêu chuẩn và Công nghệ Quốc gia Hoa Kỳ (NIST) chọn làm chuẩn mã hóa liên bang vào năm 2001, thay thế DES (Data Encryption Standard) đã lỗi thời. AES được thiết kế bởi hai nhà mật mã học người Bỉ, Joan Daemen và Vincent Rijmen, với tên gốc là thuật toán Rijndael.
AES hoạt động trên các khối dữ liệu 128-bit và hỗ trợ ba kích thước khóa: 128, 192 và 256 bit. Phiên bản AES-256 được coi là đủ an toàn cho dữ liệu tuyệt mật theo phân loại của NSA. Ngày nay, AES được sử dụng rộng rãi trong mọi lĩnh vực: bảo mật WiFi (WPA2/WPA3), mã hóa ổ đĩa (BitLocker, FileVault), giao thức TLS/HTTPS, VPN, ứng dụng nhắn tin đầu cuối (Signal, WhatsApp), và hàng triệu hệ thống khác trên toàn thế giới.
AES-256-GCM hoạt động như thế nào?
GCM (Galois/Counter Mode) là chế độ hoạt động hiện đại nhất của AES, kết hợp cả mã hóa và xác thực trong một bước duy nhất — gọi là AEAD (Authenticated Encryption with Associated Data). Điều này có nghĩa GCM không chỉ giữ bí mật dữ liệu mà còn đảm bảo dữ liệu không bị sửa đổi trong quá trình truyền tải.
Quy trình mã hóa trong công cụ này:
- Bước 1 — Tạo salt ngẫu nhiên: 16 byte salt được tạo bằng
crypto.getRandomValues(). Salt đảm bảo cùng một mật khẩu tạo ra các khóa khác nhau mỗi lần mã hóa. - Bước 2 — Dẫn xuất khóa (PBKDF2): Mật khẩu được chuyển thành khóa AES 256-bit thông qua PBKDF2 với 100.000 vòng lặp SHA-256. Quá trình này cố ý chậm để chống tấn công brute-force.
- Bước 3 — Tạo IV: 12 byte IV (Initialization Vector) ngẫu nhiên được tạo. IV đảm bảo cùng một văn bản và khóa cho ra bản mã khác nhau mỗi lần.
- Bước 4 — Mã hóa AES-GCM: Web Crypto API thực hiện mã hóa AES-256-GCM, tạo ra ciphertext kèm authentication tag 128-bit.
- Bước 5 — Đóng gói: Salt + IV + ciphertext (bao gồm auth tag) được nối lại và mã hóa Base64 để dễ chia sẻ dưới dạng văn bản.
AES so với các thuật toán mã hóa khác
| Thuật toán | Loại | Kích thước khóa | Tốc độ | Trạng thái |
|---|---|---|---|---|
AES-256 | Đối xứng | 256-bit | Rất nhanh | Tiêu chuẩn hiện tại |
ChaCha20 | Đối xứng | 256-bit | Nhanh (mobile) | Thay thế hiện đại |
3DES | Đối xứng | 168-bit | Chậm | Không còn khuyến nghị |
RSA | Bất đối xứng | 2048-4096 bit | Rất chậm | Dùng cho trao đổi khóa |
Blowfish | Đối xứng | 32-448 bit | Trung bình | Lỗi thời, dùng bcrypt |
AES-256 vẫn là lựa chọn hàng đầu cho mã hóa đối xứng nhờ sự cân bằng giữa bảo mật, hiệu suất và hỗ trợ phần cứng rộng rãi. ChaCha20-Poly1305 là lựa chọn thay thế tốt trên thiết bị di động không có AES-NI.
Lỗi phổ biến khi mã hóa
- Tái sử dụng IV/nonce: Đây là lỗi nghiêm trọng nhất với AES-GCM. Dùng cùng IV với cùng khóa hai lần sẽ cho phép kẻ tấn công XOR hai bản mã để lộ plaintext, và hoàn toàn phá vỡ authentication tag.
- Dùng mật khẩu trực tiếp làm khóa: Mật khẩu thường quá ngắn và có entropy thấp. Luôn dùng hàm dẫn xuất khóa (PBKDF2, Argon2, scrypt) để chuyển mật khẩu thành khóa an toàn.
- Không xác thực bản mã: Với CBC hoặc CTR, nếu không thêm MAC (Message Authentication Code), kẻ tấn công có thể sửa đổi ciphertext mà không bị phát hiện (padding oracle attack).
- Lưu khóa trong mã nguồn: Hardcode khóa mã hóa trong source code là lỗi bảo mật phổ biến. Dùng biến môi trường hoặc dịch vụ quản lý khóa (KMS).
- Nhầm lẫn encoding với encryption: Base64, URL encoding, hex KHÔNG phải mã hóa bảo mật. Chúng chỉ là phương pháp biểu diễn dữ liệu, bất kỳ ai cũng giải mã được.
- Không xoay vòng khóa: Dùng cùng một khóa mãi mãi tăng rủi ro nếu khóa bị lộ. Thiết lập lịch xoay vòng khóa và mã hóa lại dữ liệu định kỳ.
Sử dụng AES Encryption trong code
Hầu hết ngôn ngữ lập trình hiện đại đều có thư viện mã hóa AES tích hợp sẵn hoặc có sẵn qua package manager. Điểm quan trọng nhất là không tự implement thuật toán mã hóa — luôn dùng thư viện đã được kiểm chứng.
Trong trình duyệt, Web Crypto API (crypto.subtle) cung cấp AES-GCM với hiệu suất native. Trong Node.js, module crypto tích hợp sẵn hỗ trợ đầy đủ AES. Python có thư viện cryptography (pyca/cryptography) — lựa chọn tốt nhất cho production. Go có package crypto/aes và crypto/cipher trong thư viện chuẩn.
Công cụ này sử dụng Web Crypto API hoàn toàn — dữ liệu của bạn không bao giờ rời khỏi trình duyệt. Xem tab Code Snippets ở trên để lấy đoạn code mẫu sẵn dùng cho JavaScript, Python và Node.js.
Giới thiệu về Developer Tools
Công cụ developer tự động hóa các phần lặp đi lặp lại của công việc phần mềm: format JSON, encode/decode Base64, decode JWT để xác minh claim của token, tạo UUID, format XML, diff cấu hình. Đây không phải tác vụ hào nhoáng, nhưng là các điểm nghẽn ngốn 10-15 phút nhiều lần mỗi ngày — cộng lại hàng giờ mỗi tuần. Chạy chúng trên tab trình duyệt sạch sẽ hơn vật lộn với phụ thuộc CLI hay extension IDE có thể gửi dữ liệu riêng tư của bạn cho bên thứ ba.
Vì sao nó quan trọng
Công cụ developer client-side nhanh về cơ bản quan trọng vì chúng được dùng với dữ liệu nhạy cảm. JWT token chứa danh tính người dùng. Payload Base64 có thể encode API key. JSON dump bao gồm bản ghi khách hàng. Nếu một 'công cụ developer' gửi input của bạn lên server để xử lý, bạn vừa rò rỉ production secret. Công cụ dev của ZestLab chạy 100% client-side không có network call nào sau khi load page — những gì bạn paste vẫn ở trong trình duyệt.
Riêng tư và an toàn
Tất cả công cụ developer ở đây chạy trong trình duyệt bằng JavaScript thuần. Không có 'decode server' hay 'format API' — JWT, JSON, payload encode của bạn được parse bởi code chạy trên laptop của bạn. Tự xác minh bằng DevTools trình duyệt → Network tab: bạn sẽ thấy không có request nào khi dùng bất kỳ công cụ nào. Đó là tiêu chuẩn chúng tôi giữ vì công cụ dev xử lý secret.
Thực hành tốt
- Không bao giờ paste JWT hay API token production vào BẤT KỲ công cụ online nào mà không xác minh chạy client-side (check tab Network)
- Dùng chế độ ẩn danh trình duyệt để decode một lần các payload nhạy cảm
- Bookmark công cụ bạn dùng hàng ngày — URL công cụ ZestLab ổn định, không cần tài khoản
- Khi format JSON có secret để team review, redact credential trước khi share output