Blowfish Cipher Tutorials - Herong's Tutorial Examples - v2.03, by Herong Yang
php_blowfish.php - PHP Blowfish Demo
This section provides a tutorial example on how to use mcrypt_module_*() functions to perform Blowfish cipher encryption in PHP. The demo PHP script is provided by Chilkat Software.
Here is nice demo PHP script provided at https://www.chilkatsoft.com/p/php_blowfish.asp:
<?php #- Blowfish-PHP-Chilkat.php #- https://www.chilkatsoft.com/p/php_blowfish.asp $cipher = mcrypt_module_open(MCRYPT_BLOWFISH, '', MCRYPT_MODE_CBC, ''); // The block-size of the Blowfish algorithm is 64-bits, therefore // our IV is always 8 bytes: $iv = '12345678'; $key256 = '1234567890123456ABCDEFGHIJKLMNOP'; $key128 = '1234567890123456'; printf("iv: %s\n",bin2hex($iv)); printf("key256: %s\n",bin2hex($key256)); printf("key128: %s\n",bin2hex($key128)); $cleartext = 'The quick brown fox jumped over the lazy dog'; printf("clearText: %s\n\n",$cleartext); // Do 256-bit blowfish encryption: // The strength of the encryption is determined by the length of the // key passed to mcrypt_generic_init if (mcrypt_generic_init($cipher, $key256, $iv) != -1) { // PHP pads with NULL bytes if $cleartext is not a multiple of // the block size. $cipherText = mcrypt_generic($cipher,$cleartext ); mcrypt_generic_deinit($cipher); // Display the result in hex. printf("256-bit blowfish encrypted:\n%s\n\n", bin2hex($cipherText)); } // 128-bit blowfish encryption: if (mcrypt_generic_init($cipher, $key128, $iv) != -1) { // PHP pads with NULL bytes if $cleartext is not a multiple of // the block size. $cipherText = mcrypt_generic($cipher,$cleartext ); mcrypt_generic_deinit($cipher); // Display the result in hex. printf("128-bit blowfish encrypted:\n%s\n\n", bin2hex($cipherText)); } // ------- // Results // ------- // You may use these as test vectors for testing your Blowfish // implementations... // // iv: 3132333435363738 // key256: 31323334353637383930313233343536 // 4142434445464748494a4b4c4d4e4f50 // key128: 31323334353637383930313233343536 // clearText: The quick brown fox jumped over the lazy dog // // 256-bit blowfish encrypted: // 276855ca6c0d60f7d9708210440c1072e05d078e733b34b4 // 198d609dc2fcc2f0c30926cdef3b6d52baf6e345aa03f83e // // 128-bit blowfish encrypted: // d2b5abb73208aea3790621d028afcc74d8dd65fb9ea8e666 // 444a72523f5ecca60df79a424e2c714fa6efbafcc40bdca0 ?>
I got the following output with sample script on my Windows system:
C:\herong>php Blowfish-PHP-Chilkat.php iv: 3132333435363738 key256: 31323334353637383930313233343536 4142434445464748494a4b4c4d4e4f50 key128: 31323334353637383930313233343536 clearText: The quick brown fox jumped over the lazy dog 256-bit blowfish encrypted: 276855ca6c0d60f7d9708210440c1072e05d078e733b34b4 198d609dc2fcc2f0c30926cdef3b6d52baf6e345aa03f83e 128-bit blowfish encrypted: d2b5abb73208aea3790621d028afcc74d8dd65fb9ea8e666 444a72523f5ecca60df79a424e2c714fa6efbafcc40bdca0
What I learned from this test:
Table of Contents
OpenSSL "enc -bf-ecb" for Blowfish/ECB Encryption
OpenSSL "enc -bf-cbc" for Blowfish/CBC Encryption
OpenSSL "enc -bf-cfb" for Blowfish/CFB Encryption
OpenSSL "enc -bf-ofb" for Blowfish/OFB Encryption
►PHP Mcrypt Extension for Blowfish
PHP Mcrypt Blowfish Block Cipher
Mycrypt Blowfish Block Chaining Cipher
"ncfb/nofb" for Block Chaining Ciphers
Performing CFB Operation Manually