Công cụ mã hóa AES (AES-128/192/256)
Mã hóa văn bản bằng AES-128/192/256 ở chế độ CBC, GCM, CTR, CFB, OFB hoặc ECB. Chế độ mật khẩu tương thích OpenSSL hoặc khóa hex thô + IV. Chạy trong trình duyệt.
Kết quả ở định dạng OpenSSL "Salted__" mã hóa Base64: 8 byte salt ngẫu nhiên rồi đến bản mã. Khóa và IV được dẫn xuất từ mật khẩu và salt, nên cùng một văn bản sẽ cho kết quả khác nhau mỗi lần. Lệnh tương đương:
openssl enc -aes-256-cbc -md md5 -a -A -k '…'Chạy hoàn toàn trong trình duyệt. Dữ liệu của bạn không bao giờ bị tải lên.
Mã hóa AES là gì?
Mã hóa văn bản hoặc dữ liệu hex bằng AES, thuật toán mã khối tiêu chuẩn (FIPS 197). Bạn có thể dẫn xuất khóa từ mật khẩu theo định dạng "Salted__" của OpenSSL, để openssl enc và CryptoJS giải mã được kết quả, hoặc cung cấp khóa và IV thô dạng hex để tương thích với mã nguồn. Hỗ trợ các chế độ CBC, CFB, CTR, OFB, ECB và GCM có xác thực.
Cách sử dụng Mã hóa AES
- Giữ Nguồn khóa ở Mật khẩu (tương thích OpenSSL) và gõ Mật khẩu, hoặc chuyển sang Khóa thô + IV (hex) và nhập chính xác khóa và IV dạng hex.
- Chọn Chế độ và Đệm (padding) (CBC với PKCS#7 là mặc định của OpenSSL); với khóa thô, bạn cũng có thể chọn GCM và dữ liệu xác thực bổ sung tùy chọn.
- Gõ hoặc dán Bản rõ (hoặc đổi mã hóa đầu vào sang Hex cho dữ liệu nhị phân).
- Bấm Mã hóa, chọn Base64 hoặc Hex ở Định dạng kết quả rồi sao chép bản mã.
Ví dụ
Key 2b7e151628aed2a6abf7158809cf4f3c, IV 000102030405060708090a0b0c0d0e0f, mode CBC, padding None, hex plaintext 6bc1bee22e409f96e93d7e117393172a
7649abac8119b246cee98e9b12e9197d
Vector kiểm thử NIST SP 800-38A F.2.1, định dạng kết quả Hex.
Khi nào nên dùng Mã hóa AES
Dùng để tạo dữ liệu kiểm thử cho ứng dụng dùng AES, mã hóa một đoạn văn bản mà bạn sẽ giải mã bằng OpenSSL hoặc CryptoJS, hoặc để tìm hiểu chế độ và đệm thay đổi kết quả thế nào. Hãy ưu tiên GCM (hoặc CBC kèm MAC riêng) cho dữ liệu thật, vì riêng CBC/CTR/CFB/OFB không phát hiện được việc bị sửa đổi. Tránh ECB: các khối giống nhau cho bản mã giống nhau. Với file hoặc bí mật dài hạn, hãy dùng công cụ chuyên dụng như age, GnuPG hoặc API mã hóa của nền tảng.
Mã hóa AES hoạt động như thế nào
AES mã hóa các khối 16 byte bằng khóa 128, 192 hoặc 256 bit (10, 12 hoặc 14 vòng). Ở chế độ mật khẩu, một salt ngẫu nhiên 8 byte được tạo và khóa cùng IV được dẫn xuất bằng EVP_BytesToKey của OpenSSL (MD5, một vòng lặp – mặc định của openssl enc -md md5 và CryptoJS) hoặc bằng PBKDF2-HMAC-SHA256 (openssl enc -pbkdf2); kết quả là Base64 của Salted__ + salt + bản mã. Ở chế độ thô, khóa và IV hex của bạn được dùng trực tiếp và chỉ bản mã được trả về. CBC và ECB dùng đệm PKCS#7 (hoặc đệm 0/không đệm); CFB, OFB và CTR là chế độ dòng không cần đệm. GCM dùng Web Crypto API của trình duyệt với nonce 12 byte và nối thêm thẻ xác thực 16 byte. Bản cài đặt vượt qua các vector kiểm thử NIST SP 800-38A và GCM.
Các Trường Hợp Sử Dụng Phổ Biến
- Tạo bản mã tương thích
openssl enc -aes-256-cbcmà không cần terminal - Tái tạo kết quả của
CryptoJS.AES.encrypt(text, passphrase)để gỡ lỗi - Tạo vector kiểm thử AES-GCM (bản mã + thẻ) cho backend
- Mã hóa một bí mật ngắn bằng khóa 256 bit thô và IV để dán vào file cấu hình
- Minh họa vì sao chế độ ECB làm lộ khuôn mẫu so với CBC hoặc CTR
Lưu Ý Bảo Mật
Mọi thứ chạy cục bộ trong trình duyệt; không có gì được tải lên. EVP_BytesToKey với MD5 là phương thức dẫn xuất khóa yếu, nhanh, chỉ giữ lại để tương thích – hãy chọn PBKDF2 với nhiều vòng lặp, hoặc khóa thô ngẫu nhiên, cho mọi thứ quan trọng. Mã hóa không có xác thực (CBC, CTR, CFB, OFB) không phát hiện được sửa đổi.
Câu Hỏi Thường Gặp
Kết quả có tương thích với OpenSSL không?
Có. Ở chế độ mật khẩu, kết quả giống hệt những gì openssl enc -aes-256-cbc -md md5 -a -A -k <passphrase> tạo ra (EVP_BytesToKey với MD5), hoặc -pbkdf2 -iter N khi bạn chọn PBKDF2-HMAC-SHA256. Thêm -d để giải mã. Trang hiển thị lệnh tương ứng bên dưới ô mật khẩu.
Vì sao mỗi lần tôi nhận được một bản mã khác nhau?
Chế độ mật khẩu dùng salt ngẫu nhiên mới cho mỗi lần mã hóa, nên khóa, IV và bản mã đều thay đổi. Đó là chủ ý; bản mã nào cũng giải mã được bằng cùng mật khẩu. Chế độ khóa thô cho kết quả cố định với cùng khóa, IV và đầu vào.
Nên chọn chế độ nào?
GCM, vì nó còn xác thực dữ liệu (giải mã sẽ thất bại nếu có gì bị sửa). Nếu bên nhận chỉ hỗ trợ openssl enc, hãy dùng CBC – enc của OpenSSL không hỗ trợ GCM. Đừng bao giờ dùng lại nonce GCM hay bộ đếm CTR với cùng một khóa.
Mật khẩu và khóa thô khác nhau thế nào?
Mật khẩu được biến thành khóa bằng hàm dẫn xuất khóa và một salt được lưu trong kết quả. Khóa thô được dùng đúng như đã gõ (16, 24 hoặc 32 byte cho AES-128/192/256) cùng với một IV mà bạn phải chia sẻ riêng.