# Blowfish

Blowfish is a encryption method invented by Bruce Schneier. It is free algorithm available to everyone. Blowfish algorithm has gained lots of popularity especially due to its free license. It uses a variable lenght key, from 32 to 448-bit, although most of commercial and non comercial products uses for the strongest 448 bit encryption with blowfish.

Blowfish encrypting algorithm is fast so it has a good use on older and slower systems, however it takes over 4 kb of ram, while that is nothing for desktop systems and/or laptops and even palmtops it is an issue with micro systems like older smart cards.

### How blowfish algorithm works?

The following article is highly techinical and is based on wikipedia article

Blowfish is a 16 round feistel chiper that has key lenght from 32 to 448-bit and use large key dependent s boxes. Blowfish is similar to Cast 128 structuraly. In blowfish, every line represents 32 bits. Two subkey arrays are kept the 18 entry P-array and four 256-entry S boxes, which takes 8 bit input while producing 32 bit output. Every round one entry op P array is used, then the every halp of the data-block is XOR-ed with one of two entries that hasn't been used.

Blowfish's key schedule starts by initializing the P-array and S-boxes with values derived from the hexadecimal digits of pi, which contain no obvious pattern. The secret key is then XORed with the P-entries in order (cycling the key if necessary). A 64-bit all-zero block is then encrypted with the algorithm as it stands. The resultant ciphertext replaces P1 and P2. The ciphertext is then encrypted again with the new subkeys, and P3 and P4 are replaced by the new ciphertext. This continues, replacing the entire P-array and all the S-box entries. In all, the Blowfish encryption algorithm will run 521 times to generate all the subkeys - about 4KB of data is processed

related links:

http://www.schneier.com/blowfish.html

### More Encryption Algorithms:

- Twofish (256)

- Cast (256)

- Ice (64)

- Mars (1248)

- Misty 1 (128)

- RC2 (1024)

- RC4 (2048)

- RC6 (2048)

- Rijn Dael (AES 256)