Na criptografia, Blowfish é uma cifra de bloco de chaves simétricas, feita em 1993 por Bruce Schneier e desde 1993 tem sido incluída em um grande número de produtos de criptografia. Blowfish tem uma boa taxa de criptografia em software e até 2008 não foi encontrado nenhum modelo de ataque criptanalítico dele. Entretanto, o algoritmo de criptografia de bloco AES tem agora mais atenção.
Schneier fez o Blowfish como um algoritmo de propósito geral, para ser usado como um substituto do antigo algoritmo DES e para remover os problemas e dificuldades de outros algoritmos de criptografia. Na época do lançamento do Blowfish, muitos outros algoritmos eram proprietários, ou eram segredos. Schneier disse que, "Blowfish não tem patente, e assim permanecerá em todos os países". O algoritmo é colocado em domínio público, e pode ser usado livremente por qualquer pessoa".
As principais características do projeto incluem caixas S dependentes de chaves e um cronograma de chaves muito complexo. Blowfish é uma das cifras de bloco mais rápidas utilizadas por muitas pessoas, exceto quando se muda de chave. Cada nova chave precisa ser pré-processada, o que leva o mesmo tempo que a criptografia de cerca de 4 kilobytes de texto, o que é muito lento em comparação com outras cifras de bloco. Isto pára seu uso em certas aplicações (como nos menores sistemas embutidos como os primeiros smartcards), mas não é um problema em outras aplicações. Em uma das aplicações, na verdade, é bom: o método de captura de senhas usado no OpenBSD usa um algoritmo que vem do Blowfish que faz uso da agenda de teclas lenta; a idéia é que o esforço computacional extra necessário dá proteção contra ataques de dicionários. Veja o reforço da chave.
Blowfish tem um bloco de 64 bits e um comprimento variável de chave de 0 a 448 bits É uma cifra Feistel de 16 voltas e usa grandes caixas S dependentes de chave. É similar em estrutura ao CAST-128, que usa caixas S fixas.
Em 1996, Serge Vaudenay descobriu um ataque de pla-texto conhecido, precisando de 28r + 1 pla-intexto conhecido para quebrar, onde r é o número de rodadas. Além disso, ele também encontrou uma classe de chaves fracas que podem ser detectadas e quebradas pelo mesmo ataque com apenas 24r + 1 plaintexts conhecidos. Este ataque não pode ser usado contra os Blowfish normais; ele assume o conhecimento das caixas S dependentes de chaves. Vincent Rijmen, em seus trabalhos de doutorado, introduziu um ataque diferencial de segunda ordem que pode quebrar quatro rounds e não mais. Ainda não há maneira conhecida de quebrar os 16 rounds completos, além de uma busca por força bruta. Em 1996 foi encontrado um bug de extensão de sinal em um dos códigos C publicados.
Não há uma boa criptanálise na versão completa de Blowfish conhecida publicamente até 2008. Entretanto, em 2007, Bruce Schneier observou que enquanto o Blowfish ainda está em uso, ele recomendou o uso do novo algoritmo Twofish