Mã hóa và giải mã RSA
Mã hóa bằng khóa công khai RSA, giải mã bằng khóa riêng tư (OAEP hoặc PKCS#1 v1.5).
openssl pkeyutl -decrypt -inkey private.pem -in ciphertext.bin -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256Mã hóa một bí mật ngắn bằng khóa công khai RSA (hoặc chứng chỉ) của ai đó để chỉ người giữ khóa riêng tư đọc được, hoặc giải mã bản mã bằng khóa riêng tư của bạn. Chọn OAEP với SHA-256 (khuyến nghị), OAEP với SHA-1 hoặc PKCS#1 v1.5; kết quả ở dạng Base64 hoặc hex và dùng được với OpenSSL. Mọi thứ chạy trong trình duyệt nên khóa và thông điệp 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ã bằng RSA
- Chọn Mã hóa hoặc Giải mã, rồi dán khóa hoặc mở tệp khóa: khóa công khai hoặc chứng chỉ để mã hóa, khóa riêng tư (PKCS#8 hoặc PKCS#1) để giải mã.
- Chọn kiểu đệm: OAEP · SHA-256, trừ khi bên kia cần kiểu khác.
- Gõ thông điệp, hoặc dán bản mã dạng Base64 hay hex. Kết quả hiện ra ngay khi bạn gõ.
- Sao chép kết quả, hoặc tải bản mã xuống dưới dạng tệp .bin để dùng với OpenSSL.
Tính năng
- Mã hóa bằng khóa công khai, chứng chỉ hoặc nửa công khai của khóa riêng tư; giải mã bằng khóa riêng tư
- OAEP với SHA-256 (mặc định), OAEP với SHA-1, hoặc PKCS#1 v1.5
- Khóa dạng PEM hoặc DER: SPKI, PKCS#1, PKCS#8 và chứng chỉ X.509, đến 16384 bit
- Bản mã dạng Base64, hex hoặc tệp .bin; giải mã Base64 hay hex được dán vào, hoặc tệp .bin được mở
- Cho biết khóa và kiểu đệm mã hóa được bao nhiêu byte, kèm lệnh openssl pkeyutl tương ứng
- Chạy trong một worker WebAssembly ngay trong trình duyệt
Có riêng tư không?
Có. Việc mã hóa và giải mã chạy trong trình duyệt, trong một worker WebAssembly; khóa, thông điệp và bản mã không bao giờ bị tải lên hay lưu lại.
Câu hỏi thường gặp
Thông điệp có thể dài bao nhiêu?
RSA mã hóa một khối. Với khóa 2048 bit, đó là tối đa 190 byte với OAEP SHA-256, 214 byte với OAEP SHA-1 và 245 byte với PKCS#1 v1.5; khóa lớn hơn cho phép nhiều hơn. Với dữ liệu dài hơn, hãy mã hóa bằng thuật toán đối xứng, hoặc dùng Mã hóa tệp.
Vì sao bản mã mỗi lần một khác?
Mọi kiểu đệm đều thêm các byte ngẫu nhiên trước khi mã hóa, nên cùng một thông điệp cho ra bản mã mới mỗi lần. Đó là thiết kế có chủ ý, và bản mã nào cũng giải mã ra cùng một thông điệp.
Có dùng được với OpenSSL không?
Có. Bản mã tạo tại đây giải mã được bằng openssl pkeyutl -decrypt -inkey private.pem -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256 (hoặc rsa_padding_mode:pkcs1), và bản mã tạo bằng openssl pkeyutl -encrypt giải mã được tại đây. Hãy dùng cùng kiểu đệm ở cả hai phía.
Có thể dùng những định dạng khóa nào?
Khóa công khai PEM (BEGIN PUBLIC KEY hoặc BEGIN RSA PUBLIC KEY), chứng chỉ, và khóa riêng tư không mã hóa ở dạng PKCS#8 (BEGIN PRIVATE KEY) hoặc PKCS#1 (BEGIN RSA PRIVATE KEY), kể cả dạng tệp DER. Khóa có mật khẩu bảo vệ và khóa OpenSSH cần được chuyển đổi trước; công cụ sẽ hướng dẫn cách làm.
Vì sao giải mã thất bại?
Thường là do kiểu đệm hoặc khóa. Hãy giải mã bằng đúng kiểu đệm đã dùng khi mã hóa, và bằng khóa riêng tư đi cùng khóa công khai đã dùng; công cụ cố ý không phân biệt hai trường hợp này, nên hãy thử các kiểu đệm khác. Bản mã luôn dài bằng khóa (256 byte với khóa 2048 bit), nên bản mã ngắn hơn là đã bị cắt mất khi sao chép.