Twofish is a symmetrical block cipher encryption algorithm developed by Bruce Schneier. It is a successor to the Blowfish algorithm, and is designed to be highly secure and highly flexible. It is well suited for use on a variety of different processor sizes and types and memory constraints. It typically uses 128, 192 or 256-bit keys. It is based on a Feistel network (like DES is) so the basic technique it is based on has long been studied in cryptography and the encryption technique's behavior is well known.