Blowfish là thuật toán mật mã khối đối xứng do Bruce Schneier phát minh tháng 12/1993. Thuật toán Blowfish có nhiều ưu điểm. Phù hợp và hiệu quả cho triển khai phần cứng, không cần giấy phép. Phép toán cơ bản: tra bảng, cộng, XOR. Bảng chứa 4 S-boxes và mảng P.
Blowfish là mật mã dựa trên vòng Feistel, thiết kế hàm F đơn giản hóa nguyên tắc DES để đạt cùng bảo mật với tốc độ/hiệu quả cao hơn trong phần mềm.
Blowfish là mật mã khối đối xứng 64-bit cần khóa độ dài biến đổi 32-448 bit (14 byte). Thuật toán thiết kế mã hóa 64-bit bản rõ thành 64-bit bản mã hiệu quả và an toàn.
Phép toán chọn cho thuật toán: tra bảng, modulo, cộng, XOR bitwise để giảm thiểu thời gian mã hóa/giải mã trên bộ xử lý 32-bit.
Giống DES, Blowfish có mạng Feistel 16 vòng cho mã hóa/giải mã. Nhưng mỗi vòng Blowfish, nửa trái và phải 32-bit đều thay đổi, khác DES chỉ thay nửa phải thành nửa trái vòng sau.
Blowfish bao gồm phép XOR bitwise trên nửa trái 32-bit trước khi chuyển qua hàm F hoặc truyền sang nửa phải cho vòng sau.
Blowfish cũng bao gồm hai phép XOR sau 16 vòng và phép hoán đổi. Phép toán này khác hàm hoán vị trong DES.
Quá trình mã hóa - Có 2 đầu vào: hình ảnh thông tin như bản rõ và khóa mã hóa. Phương pháp này, luồng bit dữ liệu hình ảnh gốc chia thành khối độ dài Blowfish.
Header hình ảnh không mã hóa, đầu mảng pixel/bitmap bắt đầu ngay sau header file. Byte của mảng lưu theo hàng từ trái sang phải, mỗi hàng định nghĩa một dòng quét hình ảnh, hàng mã hóa từ trên xuống dưới.
Quá trình giải mã - Hình ảnh mã hóa chia thành cùng độ dài khối Blowfish từ trên xuống dưới. Khối đầu vào hàm giải mã và khóa mã hóa tương tự dùng để giải mã nhưng áp dụng khóa con ngược. Quy trình giải mã mở rộng với các khối khác nhau từ trên xuống dưới.
Thuật toán cơ bản Blowfish:
Chia x thành 2 nửa 32-bit: xL, xR.
Với i = 1 đến 16:
xL = xL XOR Pi
xR = F(xL) XOR xR
Hoán đổi xL và xR
Sau vòng 16, hoán đổi xL và xR lại để undo hoán đổi cuối.
Sau đó, bản mã = nối xL và xR, xR = xR XOR P17 và xL = xL XOR P18.