Mã hóa / giải mã AES
Dán văn bản và cụm mật khẩu để mã hóa hoặc giải mã nhanh bằng cipher PHP OpenSSL đã chọn. AES là block cipher đối xứng được NIST chuẩn hóa trong FIPS 197 và được dùng trong nhiều hệ thống TLS, WPA2, VPN và mã hóa ổ đĩa, nhưng trang này là tiện ích cho văn bản rủi ro thấp, không phải kho bí mật đã được kiểm toán. Với file nhạy cảm hoặc bí mật cần lưu lâu, hãy dùng công cụ offline như age, GnuPG hoặc 7-Zip.
Cách mã hóa văn bản bằng AES
-
1
Chọn cipher OpenSSL
Các tùy chọn hiện có gồm biến thể CBC, CTR và GCM. CBC và CTR không được xác thực, còn công cụ này không lưu hoặc kiểm tra tag xác thực GCM.
-
2
Nhập cụm mật khẩu
Cụm mật khẩu được băm một lần bằng SHA-256 để tạo khóa AES. Không có PBKDF2, salt, Argon2 hay work factor, nên hãy dùng cụm mật khẩu dài và ngẫu nhiên.
-
3
Dán văn bản rủi ro thấp
Đây là tiện ích Livewire/PHP OpenSSL chạy phía máy chủ. Đừng dán mật khẩu, khóa production, tài liệu riêng tư hoặc bí mật mà bạn không muốn gửi cho trang này.
-
4
Sao chép kết quả Base64
Khi mã hóa, công cụ tạo IV ngẫu nhiên, đặt trước bản mã thô rồi mã hóa các byte kết hợp thành Base64. Giải mã cần cùng cipher và cùng cụm mật khẩu.
Công cụ này thật sự xuất ra gì
Triển khai này dùng PHP OpenSSL. Khi mã hóa, nó băm cụm mật khẩu bằng SHA-256, tạo IV ngẫu nhiên có độ dài mà cipher đã chọn yêu cầu, mã hóa văn bản rồi trả về:
Base64(IV || bản mã)
Đầu ra không gồm salt, tham số PBKDF2, HMAC hay tag xác thực GCM. Nó không tương thích với định dạng do Web Crypto, age, GnuPG, các công thức dòng lệnh OpenSSL hoặc 7-Zip tạo ra.
Các tùy chọn AES trong ngữ cảnh
AES có kích thước block cố định 128 bit (16 byte) và các kích thước khóa chuẩn 128, 192, 256 bit. Điểm khác biệt bảo mật quan trọng ở đây không chỉ là kích thước khóa, mà còn là thông điệp mã hóa có được xác thực hay không.
| Tùy chọn cipher | Điều cần biết trong công cụ này |
|---|---|
| AES-128-CBC / AES-192-CBC / AES-256-CBC | Chế độ block phổ biến với IV ngẫu nhiên và padding PKCS#7. Cần MAC riêng như HMAC-SHA-256 để phát hiện chỉnh sửa. |
| AES-256-CTR | Biến AES thành chế độ giống stream. Cũng cần xác thực riêng và không bao giờ được dùng lại cùng IV/counter với cùng khóa. |
| AES-128-GCM / AES-256-GCM | GCM thường là chế độ AEAD, nhưng chỉ khi tag xác thực được lưu và kiểm tra. Đầu ra của công cụ này không chứa tag đó, nên đừng dựa vào nó cho mã hóa có xác thực. |
Nhắc nhở bảo mật
Hướng dẫn lưu trữ mật mã của OWASP khuyến nghị mã hóa có xác thực khi có thể, hoặc mã hóa kèm MAC riêng. Hãy ghi nhớ điều đó khi dùng tiện ích này:
- Đây là mã hóa đối xứng - cùng cụm mật khẩu dùng để giải mã. Hãy chia sẻ nó qua kênh khác với bản mã.
- Cụm mật khẩu yếu sẽ thành khóa yếu ở đây - SHA-256 nhanh và không có salt, nên kẻ tấn công có thể thử đoán rất nhanh nếu có đầu ra.
- CBC và CTR cần xác thực - nếu không có HMAC hoặc MAC khác, kẻ tấn công có thể chỉnh bản mã mà không bị phát hiện.
- Không dùng lại IV hoặc nonce với cùng khóa - công cụ tạo IV ngẫu nhiên mới khi mã hóa, nhưng dữ liệu bên ngoài được dán vào cũng phải tuân theo quy tắc này.
- Dùng công cụ đã được kiểm toán cho bí mật thật sự - age, GnuPG và 7-Zip xử lý định dạng file, metadata và xác thực cẩn thận hơn.
Câu hỏi thường gặp
Component hiện tại băm cụm mật khẩu bằng SHA-256 và dùng các byte kết quả làm vật liệu khóa cho OpenSSL. Nó không dùng PBKDF2, salt, scrypt hay Argon2, nên cụm mật khẩu ngắn hoặc dùng lại sẽ rủi ro.
Không. CBC và CTR cần MAC riêng như HMAC-SHA-256. Dù GCM thường cung cấp xác thực AEAD, công cụ này không lưu hoặc kiểm tra tag GCM trong đầu ra Base64.
Trên máy chủ của trang khi action Livewire chạy PHP OpenSSL. Đây không phải công cụ Web Crypto chỉ chạy trong trình duyệt, nên đừng dán bí mật giá trị cao, khóa riêng hoặc tài liệu nhạy cảm.
Kết quả Base64 chứa IV ngẫu nhiên theo sau là bản mã thô. Padding CBC có thể thêm byte, và Base64 làm dữ liệu nhị phân lớn hơn khoảng một phần ba. Định dạng được lưu không có salt hoặc tag xác thực.
Công cụ này chỉ xử lý văn bản và nên giới hạn cho các đoạn rủi ro thấp. Với file hoặc bí mật quan trọng, hãy dùng tiện ích mã hóa offline đã được kiểm toán như age, GnuPG hoặc 7-Zip.
Công cụ liên quan
Bộ mã hóa mật mã A1Z26
Mã hóa văn bản bằng mật mã A1Z26 (A=1, B=2, ... Z=26) hoặc giải mã chuỗi số về chữ cái, với dấu phân tách tùy chỉnh.
Bộ mã hóa mật mã Atbash
Mã hóa hoặc giải mã văn bản bằng mật mã Atbash, phép thay thế Hebrew ánh xạ A-Z thành Z-A. Cùng một thao tác dùng để mã hóa và giải mã.
Công cụ đếm từ
Đếm số từ, ký tự, câu và đoạn văn kèm thời gian đọc, thời gian nói, mật độ từ khóa và điểm dễ đọc Flesch cho bài luận, bài đăng, chú thích và meta description.
Máy tính dự đoán chiều cao khi trưởng thành
Ước tính chiều cao khi trưởng thành của trẻ từ chiều cao cha mẹ và tuổi hiện tại bằng công thức mid-parental, kèm khoảng sai số thường gặp.
Trình đổi kích thước ảnh
Đổi kích thước ảnh theo số pixel chính xác hoặc theo phần trăm mà vẫn giữ tỷ lệ khung hình. Phù hợp để chuẩn bị nhiều ảnh, không cần tải lên.
Emoji Kitchen
Ghép hai emoji và xem nhãn dán do Google Emoji Kitchen tạo ra. Khám phá hàng nghìn tổ hợp có sẵn.