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

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

Mã hóa và giải mã văn bản bằng ChaCha20-Poly1305 hoặc ChaCha20 thuần.

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ế độ

Có xác thực: phát hiện mật khẩu hoặc khóa sai, hay mọi thay đổi trong văn bản.

Xuất dạng
Làm tương tự với OpenSSL

Lệnh enc của OpenSSL không đọc được ChaCha20-Poly1305. Hãy giải mã tại đây, hoặc bằng mã lập trình với thư viện mật mã: thẻ 16 byte nằm sau bản mã.

ChaCha20-Poly1305 (RFC 8439) là thuật toán mã hóa có xác thực được dùng trong TLS 1.3 và WireGuard: nó vừa mã hóa văn bản vừa phát hiện mọi thay đổi hoặc mật khẩu sai. Tại đây bạn có thể mã hóa văn bản bằng mật khẩu hoặc khóa 256 bit và nonce 12 byte của riêng mình, hoặc dán bản mã Base64 hay hex để giải mã. Khi dùng mật khẩu, khóa và nonce được tạo bằng PBKDF2-HMAC-SHA256 với salt ngẫu nhiên, giống openssl enc -pbkdf2, và kết quả gồm Salted__, salt, bản mã và thẻ Poly1305 16 byte. ChaCha20 thuần, không có thẻ, cũng có sẵn, theo cấu trúc chacha20 của OpenSSL. 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ụ chạy trong trình duyệt, miễn phí, không cần đăng ký.

Cách mã hóa văn bản bằng ChaCha20-Poly1305

  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 64 chữ số và nonce 24 chữ số (IV 32 chữ số với ChaCha20 thuần).
  3. Giữ ChaCha20-Poly1305, hoặc chọn ChaCha20 để khớp với openssl enc -chacha20. Khi giải mã, hãy dùng đúng chế độ, mật khẩu và số vòng lặp đã 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à giải mã lại để kiểm tra.

Tính năng

  • ChaCha20-Poly1305 theo RFC 8439: khóa 256 bit, nonce 12 byte, thẻ 16 byte
  • ChaCha20 thuần theo cấu trúc của OpenSSL: IV 16 byte gồm bộ đếm 4 byte little-endian và nonce 12 byte
  • Chế độ mật khẩu: khóa và nonce từ PBKDF2-HMAC-SHA256 với salt ngẫu nhiên, sau phần đầu Salted__ của openssl enc -pbkdf2
  • Chế độ Khóa & IV: khóa và nonce hex của riêng bạn, hoặc ngẫu nhiên từ nút Tạo
  • Với Poly1305, mật khẩu hoặc khóa sai, hay chỉ một ký tự bị đổi, sẽ khiến giải mã thất bại thay vì trả về dữ liệu rác
  • Không đệm: bản mã dài đúng bằng văn bản, cộng thêm thẻ 16 byte khi dùng Poly1305
  • Lệnh openssl enc -chacha20 cho ChaCha20 thuần

Có riêng tư không?

Có. ChaCha20 chạy bằng WebAssembly ngay trong trình duyệt, và mật khẩu được kéo giãn bằng Web Crypto của trình duyệt. Không có gì bạn nhập — văn bản, mật khẩu, khóa hay nonce — bị tải lên hoặc lưu lại.

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

Nên dùng ChaCha20-Poly1305 hay ChaCha20 thuần?

ChaCha20-Poly1305, lựa chọn mặc định, cho mọi dữ liệu mới: thẻ Poly1305 khiến việc giải mã thất bại nếu có một ký tự bị đổi hoặc mật khẩu sai. ChaCha20 thuần chỉ mã hóa — khóa sai cho ra các byte không đọc được thay vì báo lỗi — nên chỉ dùng nó để khớp với hệ thống đang dùng nó, chẳng hạn openssl enc -chacha20.

OpenSSL có giải mã được không?

Với ChaCha20 thuần thì được: echo 'U2FsdGVkX1…' | openssl enc -d -chacha20 -pbkdf2 -iter 10000 -a -A cho chế độ mật khẩu, hoặc -K <khóa hex> -iv <IV hex> thay cho -pbkdf2 -iter ở chế độ Khóa & IV. Với ChaCha20-Poly1305 thì không: openssl enc từ chối các mã AEAD. Hãy đọc nó tại đây hoặc bằng mã lập trình: ở chế độ Khóa & IV, kết quả là bản mã theo sau là thẻ 16 byte, không có phần đầu.

Điều gì xảy ra nếu dùng lại nonce?

Hai tin nhắn dùng chung khóa và nonce sẽ để lộ phép XOR của hai văn bản, và cho phép kẻ tấn công giả mạo thẻ Poly1305. Ở chế độ mật khẩu, bạn không thể mắc lỗi này: mỗi lần mã hóa đều chọn salt ngẫu nhiên mới, nên khóa, nonce và kết quả đều mới. Ở chế độ Khóa & IV, hãy bấm Tạo để có nonce mới trước mỗi tin nhắn.

ChaCha20 có an toàn bằng AES không?

Có. ChaCha20-Poly1305 và AES-GCM đều là mã chuẩn của TLS 1.3 và chưa có cách tấn công thực tế nào, và ChaCha20 thường nhanh hơn trên điện thoại không có phần cứng AES. Điểm yếu là mật khẩu: hãy dùng mật khẩu dài, ngẫu nhiên, và thiết lập 600.000 vòng lặp khi bạn kiểm soát cả hai phía.

Có hỗ trợ XChaCha20-Poly1305 không?

Không. XChaCha20, biến thể dùng nonce 24 byte có trong libsodium, là một cấu trúc khác, nên bản mã của nó không giải mã được ở đây. Trang này nhận nonce 12 byte của RFC 8439 và IV chacha20 16 byte của OpenSSL. Để mã hóa tệp thay vì văn bản, công cụ Mã hóa tệp dùng ChaCha20-Poly1305 theo định dạng age.

Công cụ liên quan