Blowfish encryption library Javascript, jquery,coffeescript (blowfish.js)
Works well both in old and new browsers.
Blowfish is block cipher, block length is 8 byte.
Online DEMO of javascript-blowfish.
A key advantage of the library is that it works correctly with strings in UTF-8.
It you want to encrypt string information (like text-message, or json, xml): use trimZeros method (see bellow Example 1).
varbf=newBlowfish("secret key");varencrypted=bf.encrypt("secret message");vardecrypted=bf.decrypt(encrypted);decrypted=bf.trimZeros(decrypted);// for string/text information console.log(decrypted);If you want to encrypt binary data you must provide encrypt function with string length multiple by 8.
Example:
Input string for encryption: "asdf" (4 bytes) is not enough.
Blowfish want 8-byte string (or 16, 24, 32,...)
So my lib automaticaly pad string with zeros: "asdf\0\0\0\0"
If you want to prevent such behaviour you should pad input data to block size.
Additional info about padding: Using Padding in Encryption (@lucnap) suggested
After decryption we will get not "asdf", but "asdf\0\0\0\0" string.
For CBC you need additional key (CBC Vector) which length should be 8 bytes.
varbf=newBlowfish("key","cbc");varencrypted=bf.encrypt("secret message","cbcvecto");vardecrypted=bf.decrypt(encrypted,"cbcvecto");Blowfish when encrypt produces binary string as result. It's not usable for example, to copy paste. We could encode it to base64 text format:
varbf=newBlowfish("key");// Encrypt and encode to base64varencrypted=bf.base64Encode(bf.encrypt("secret message"));console.log(encrypted);// Decryptvarencrypted=bf.base64Decode(encrypted);vardecrypted=bf.decrypt(encrypted);Upd: 21.07.2018
Installation:
$ npm install agorlov/javascript-blowfishUsage example:
constBlowfish=require('javascript-blowfish');constkey="secret key";constbf=newBlowfish(key);console.log("Blowfish encrypt text by key: "+key);// Encryptionconstencrypted=bf.encrypt("Secret message. Confidentially!");letencryptedMime=bf.base64Encode(encrypted);console.log(encryptedMime);// Decryptionconsole.log('decrypted: ',bf.decrypt(bf.base64Decode(encryptedMime)));