Blowfish là một thuật toán mật mã khối đối xứng được phát minh bởi Brute Schneier vào tháng 12 năm 1993. Thuật toán Blowfish có một số ưu điểm. Nó có thể áp dụng và hiệu quả cho việc triển khai phần cứng và không cần giấy phép. Các toán tử cơ bản của thuật toán Blowfish bao gồm tra cứu bảng, bổ sung và XOR. Bảng chứa bốn hộp S và một mảng P.
Blowfish là một mật mã phụ thuộc vào các vòng Feistel và thiết kế của hàm F được sử dụng giúp đơn giản hóa các nguyên tắc được sử dụng trong DES để hỗ trợ bảo mật tương tự với tốc độ và 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 có độ dài thay đổi từ 32 đến 448 bit (14 byte). Thuật toán được tạo ra để mã hóa bản rõ 64 bit thành văn bản mã hóa 64 bit một cách hiệu quả và an toàn.
Các thao tác được chọn cho thuật toán là tra cứu bảng, mô-đun, bổ sung và loại trừ từng bit-hoặc để giảm thiểu thời gian cần thiết để mã hóa và giải mã thông tin trên bộ xử lý 32 bit.
Như với DES, Blowfish bao gồm một mạng Feistel 16 vòng để mã hóa và giải mã. Nhưng trong mỗi vòng Blowfish, dữ liệu 32 bit bên trái và bên phải được thay đổi không giống như DES chỉ thay đổi 32 bit bên phải để phát triển thành 32 bit bên trái của vòng tiếp theo.
Blowfish bao gồm một phép toán-hoặc hoạt động độc quyền theo từng bit sẽ được thực hiện ở 32-bit bên trái trước khi được thay đổi bởi hàm F hoặc được truyền sang 32-bit bên phải cho vòng sau.
Blowfish cũng bao gồm hai hoạt động độc quyền hoặc sẽ được thực hiện sau 16 vòng đấu và một hoạt động hoán đổi. Thao tác này khác với hàm hoán vị được triển khai trong DES.
Quy trình mã hóa - Có hai tin tức về quá trình mã hóa gồm hình ảnh thông tin dưới dạng văn bản thuần túy và khóa mã hóa. Trong phương pháp này, luồng bit dữ liệu hình ảnh gốc được chia thành độ dài khối của thuật toán Blowfish.
Tiêu đề hình ảnh không được phép mã hóa và điểm bắt đầu của pixel hoặc mảng bitmap bắt đầu ngay sau tiêu đề của tệp. Thành phần byte của mảng được lưu theo thứ tự hàng từ trái sang phải với mỗi hàng xác định một dòng quét của hình ảnh và các hàng của hình ảnh được mã hóa từ trên xuống dưới.
Quy trình giải mã - Hình ảnh mã hóa được chia khối tương đương với chiều dài của thuật toán Blowfish từ trên xuống dưới. Khối đầu tiên được nhập vào chức năng giải mã và khóa mã hóa tương đương có thể được sử dụng để giải mã hình ảnh nhưng việc áp dụng các khóa phụ bị đảo ngược. Quá trình giải mã được mở rộng với các khối hình ảnh khác nhau từ trên xuống dưới.
Thuật toán cơ bản cho Blowfish như sau -
Chia x thành hai nửa 32 bit:x L , x R .
Sau đó, cho i =1 đến 16;
x L =x L XOR Pi
x R =F (x L ) XOR x R
Hoán đổi x L và x R
Sau ngày thứ 16 vòng, Hoán đổi x L và x R một lần nữa để hoàn tác lần hoán đổi cuối cùng.
Sau đó, ciphertext =nối x L và x R , x R =x R XOR P17 và x L =x L XOR P 18 .