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

Mã hóa hoặc giải mã bằng Blowfish (khóa 4–56 byte) ở CBC, CFB, OFB hoặc ECB. Định dạng mật khẩu OpenSSL bf-cbc hoặc khóa hex thô và IV. Miễn phí, chạy trong trình duyệt.

Blowfish là thuật toán cũ: khối 64 bit khiến thông điệp dài dễ bị tấn công ngày sinh (Sweet32). Hãy dùng AES cho dữ liệu mới.

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 -bf-cbc -md md5 -a -A -provider legacy -provider default -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 và giải mã Blowfish là gì?

Mã hóa và giải mã dữ liệu bằng Blowfish, thuật toán mã khối năm 1993 của Bruce Schneier với khối 64 bit và độ dài khóa thay đổi (4–56 byte). Dùng tab Mã hóa / Giải mã để đổi chiều, nhờ đó bạn cũng có thể giải mã kết quả của chính mình hoặc dữ liệu từ bf-cbc của OpenSSL.

Cách sử dụng Mã hóa và giải mã Blowfish

  1. Chọn tab Mã hóa hoặc Giải mã.
  2. Chọn Mật khẩu (tương thích OpenSSL) và gõ mật khẩu, hoặc Khóa thô + IV (hex) với khóa 4–56 byte và IV 8 byte.
  3. Chọn Chế độ và Đệm (padding) (CBC + PKCS#7 khớp với OpenSSL bf-cbc).
  4. Nhập bản rõ hoặc bản mã, bấm nút và sao chép kết quả.

Ví dụ

Đầu vào
Raw key 0000000000000000, mode ECB, padding None, hex plaintext 0000000000000000
Đầu ra
4ef997456198dd78

Vector kiểm thử Blowfish đầu tiên của Schneier, kết quả Hex.

Khi nào nên dùng Mã hóa và giải mã Blowfish

Dùng để đọc hoặc tạo dữ liệu cho phần mềm cũ dùng Blowfish, hoặc để tạo vector kiểm thử. Khối 64 bit khiến nó không phù hợp với lượng dữ liệu lớn (Sweet32). Với công việc mới, hãy dùng AES. Lưu ý mã băm mật khẩu bcrypt dựa trên Blowfish nhưng không phải dữ liệu mã hóa – không thể giải mã chúng ở đây.

Mã hóa và giải mã Blowfish hoạt động như thế nào

Blowfish mở rộng khóa thành 18 phần tử P-array và bốn S-box 256 phần tử, rồi chạy 16 vòng Feistel trên mỗi khối 8 byte. Khóa có độ dài bất kỳ từ 4 đến 56 byte được nạp vòng từng byte qua P-array như bản cài đặt tham chiếu (đã xác minh bằng vector kiểm thử khóa độ dài thay đổi của Eric Young). Chế độ mật khẩu dẫn xuất khóa 16 byte và IV 8 byte từ mật khẩu và salt ngẫu nhiên (EVP_BytesToKey MD5 hoặc PBKDF2-SHA256) và ghi theo định dạng Salted__ của OpenSSL, tương thích với openssl enc -bf-cbc. CBC/ECB dùng đệm PKCS#7, được kiểm tra khi giải mã.

Các Trường Hợp Sử Dụng Phổ Biến

  • Giải mã kết quả của openssl enc -bf-cbc
  • Tạo vector kiểm thử Blowfish với khóa có độ dài bất thường
  • Tương tác với mã PHP mcrypt hoặc Java Blowfish cũ
  • Dạy mã Feistel bằng một thuật toán kinh điển

Lưu Ý Bảo Mật

Blowfish chưa bị phá, nhưng khối 64 bit của nó dễ bị tấn công sinh nhật sau vài gigabyte dữ liệu với cùng một khóa. Hãy ưu tiên AES cho dữ liệu mới.

Câu Hỏi Thường Gặp

Tôi có giải mã được trên trang này không?

Có – bấm tab Giải mã, nhập cùng mật khẩu hoặc khóa/IV và thiết lập, rồi dán bản mã.

Có giải mã được mã băm bcrypt không?

Không. bcrypt là hàm băm mật khẩu một chiều chỉ dùng Blowfish bên trong; nó không thể giải mã, chỉ có thể xác minh.

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 -bf-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.

Cho phép những độ dài khóa nào?

Từ 4 đến 56 byte (8 đến 112 ký tự hex). Chế độ mật khẩu luôn dẫn xuất khóa 128 bit, giống OpenSSL.

Khám phá thêm danh mục