Toolonit
  1. Trang chủ
  2. Mã hóa
  3. Mã hóa / Giải mã
  4. AES

Mã hóa và giải mã AES

Mã hóa và giải mã văn bản bằng AES-128, 192 hoặc 256 — GCM, CBC, CTR và nhiều chế độ khác.

Mã hóa bằng

Bạn sẽ cần lại mật khẩu này để giải mã. Không có gì bạn gõ rời khỏi trang này.

Số vòng lặp PBKDF2

Mặc định của OpenSSL là 10.000. Số nào cũng được: càng nhiều thì mật khẩu càng khó đoán; khi giải mã cần đúng số đó.

Chế độ

Lựa chọn thông dụng với OpenSSL. Cần IV; đệm cho đủ khối.

Độ dài khóa
Xuất dạng
Làm tương tự với OpenSSL
openssl enc -aes-256-cbc -pbkdf2 -iter 10000 -a -A

OpenSSL sẽ hỏi mật khẩu; hãy dán văn bản vào đó, hoặc thêm tệp -in và -out.

Mã hóa văn bản bằng AES-256 — hoặc AES-128, AES-192 — với mật khẩu hay khóa và IV của riêng bạn, hoặc dán bản mã AES dạng Base64 hay hex để giải mã. Khi dùng mật khẩu, kết quả có cùng định dạng với openssl enc -pbkdf2: phần đầu Salted__, salt ngẫu nhiên 8 byte rồi đến bản mã, còn khóa và IV được tạo bằng PBKDF2-HMAC-SHA256. Cấu hình mặc định — AES-256, chế độ CBC, đệm PKCS#7, đầu ra Base64 — khớp với openssl enc -aes-256-cbc -pbkdf2 -a, còn GCM, CTR, CFB, OFB và ECB chỉ cách một cú nhấp. Kết quả cập nhật ngay khi bạn gõ. Mọi thứ diễn ra trong trình duyệt nên văn bản, mật khẩu và khóa không bao giờ rời khỏi thiết bị của bạn; công cụ miễn phí và không cần đăng ký.

Cách mã hóa và giải mã văn bản bằng AES

  1. Chọn Mã hóa hoặc Giải mã. Gõ văn bản cần mã hóa, hoặc dán văn bản Base64 hay hex cần giải mã — định dạng được nhận diện tự động.
  2. Nhập mật khẩu (nút Tạo sẽ sinh một mật khẩu mạnh), hoặc chuyển sang Khóa & IV (hex) rồi nhập hoặc tạo khóa và IV đúng độ dài được hiển thị.
  3. Chọn độ dài khóa (128, 192 hoặc 256 bit) và chế độ. Khi giải mã, hãy dùng đúng mật khẩu, số vòng lặp, độ dài khóa và chế độ đã dùng để mã hóa.
  4. Sao chép hoặc tải xuống kết quả, hoặc bấm Hoán đổi để đưa kết quả vào ô nhập và đổi chiều. Ở mục Làm tương tự với OpenSSL, trang hiển thị lệnh openssl tương ứng, không kèm mật khẩu của bạn.

Tính năng

  • AES-128, AES-192 và AES-256 ở chế độ CBC, GCM, CTR, CFB, OFB hoặc ECB
  • Chế độ mật khẩu theo định dạng openssl enc -pbkdf2: phần đầu Salted__, salt ngẫu nhiên 8 byte, khóa và IV từ PBKDF2-HMAC-SHA256
  • 10.000 (mặc định của OpenSSL), 100.000 hoặc 600.000 vòng lặp PBKDF2, hoặc bất kỳ số nào đến 10 triệu
  • Chế độ Khóa & IV với khóa và IV hex của riêng bạn, hoặc khóa và IV ngẫu nhiên từ nút Tạo
  • AES-GCM phát hiện mật khẩu hoặc khóa sai và mọi thay đổi trong bản mã
  • Đệm PKCS#7, hoặc không đệm ở CBC và ECB
  • Đầu ra Base64 hoặc hex; đầu vào Base64 hoặc hex được nhận diện tự động
  • Lệnh openssl enc tương ứng cho mọi chế độ trừ GCM

Có riêng tư không?

Có. AES chạy bằng WebAssembly ngay trong trình duyệt, và mật khẩu được chuyển thành khóa bằng Web Crypto có sẵn của trình duyệt. Văn bản, mật khẩu và khóa của bạn không bao giờ bị tải lên hay lưu lại, và lệnh openssl mà trang hiển thị cũng không bao giờ chứa chúng.

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

Nên dùng chế độ AES nào?

Với dữ liệu mới, hãy dùng GCM: ngoài mã hóa, nó còn phát hiện mọi thay đổi trong văn bản và mật khẩu sai. Chọn CBC, chế độ mặc định, khi bên kia dùng openssl enc vốn không đọc được GCM; chỉ chọn CTR, CFB hoặc OFB để khớp với một hệ thống sẵn có. Tránh ECB: các khối 16 byte giống nhau cho ra bản mã giống nhau, nên các mẫu lặp trong văn bản vẫn lộ ra.

Có thể giải mã kết quả bằng OpenSSL không?

Được, trừ GCM. Với cấu hình mặc định: echo 'U2FsdGVkX1…' | openssl enc -d -aes-256-cbc -pbkdf2 -iter 10000 -a -A — sau đó OpenSSL sẽ hỏi mật khẩu. Đổi 256 và cbc thành độ dài khóa và chế độ bạn dùng (ecb, ctr, cfb, ofb), đổi -iter thành số vòng lặp của bạn, và thêm -nopad nếu bạn đã tắt đệm; với đầu ra hex, bỏ -a -A và cho văn bản đi qua xxd -r -p trước. Với chế độ Khóa & IV, dùng -K <khóa hex> -iv <IV hex> thay cho -pbkdf2 -iter. openssl enc từ chối GCM (không hỗ trợ mã AEAD), nên bản mã GCM chỉ đọc được tại đây hoặc bằng mã lập trình.

Vì sao mỗi lần mã hóa lại ra kết quả khác nhau?

Vì mỗi lần mã hóa bằng mật khẩu đều chọn một salt ngẫu nhiên mới, nên khóa, IV và toàn bộ kết quả thay đổi mỗi lần — và phiên bản nào cũng giải mã ra cùng một văn bản. Điều này là có chủ ý: không ai biết được hai tin nhắn có giống nhau hay không. Ở chế độ Khóa & IV, kết quả sẽ lặp lại khi khóa và IV lặp lại, vì vậy hãy tạo IV mới cho mỗi tin nhắn: dùng lại IV với cùng một khóa làm CBC yếu đi và phá vỡ CTR lẫn GCM.

Vì sao trang báo mật khẩu sai?

Vì có điều gì đó không khớp: mật khẩu, số vòng lặp, độ dài khóa, chế độ và kiểu đệm đều phải giống lúc mã hóa, còn bản mã chỉ lưu salt. Văn bản bắt đầu bằng U2FsdGVkX1 nhưng được tạo bởi openssl enc không có -pbkdf2, hoặc bởi CryptoJS với passphrase, dùng cách tạo khóa cũ hơn (EVP_BytesToKey) mà trang này không đọc được — hãy mã hóa lại bằng -pbkdf2, hoặc dùng chế độ Khóa & IV nếu bạn có khóa và IV gốc.

Mã hóa AES-256 có an toàn không?

Có. AES không có cách tấn công thực tế nào ở bất kỳ độ dài khóa nào; điểm yếu nằm ở mật khẩu. Hãy dùng mật khẩu dài, ngẫu nhiên (nút Tạo sẽ tạo cho bạn) và, khi bạn kiểm soát cả hai phía, tăng số vòng lặp lên 600.000 — con số OWASP hiện khuyến nghị cho PBKDF2-HMAC-SHA256. Chọn GCM nếu bạn cũng cần biết văn bản không bị sửa đổi.

Công cụ liên quan