# Cryptographic algorithm Blowfish

**Blowfish** – a cryptographic algorithm developed in 1993 by Bruce Schneier.

## Description of Blowfish

Blowfish is a 64-bit block cipher with a variable-length key. The algorithm consists of two parts: key expansion and data encryption.

Key expansion converts a key of up to 448 bits into several subkey arrays totaling 4168 bytes.

Data encryption consists of a simple function iterated 16 times. Each round consists of a keydependent permutation, and a key- and data-dependent substitution. All operations are additions and XORs on 32-bit words. The only additional operations are four indexed array data lookups per round.

Blowfish uses a large number of subkeys. These keys must be precomputed before any data encryption or decryption.

The P-array consists of 18 32-bit subkeys: P1, P2, … , P18.

Four 32-bit S-boxes have 256 entries each:

## Method of calculating the subkeys

The exact method used to calculate these subkeys will be described later in this section.

Blowfish is a Feistel network consisting of 16 rounds. The input is a 64-bit data element, x.

## Bibliography

- Bruce Schneier. Applied Cryptography. Protocols, Algorithms and Source Code in C.