Skip to content

Blowfish encryption library Javascript, jquery,coffeescript (blowfish.js)

Notifications You must be signed in to change notification settings

lucnap/javascript-blowfish

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

javascript-blowfish

Blowfish encryption library Javascript, jquery,coffeescript (blowfish.js)

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.

trimZeros() method no more required for new encrypted data

The padding method has been changed. Now the algorithm pad with 0x80 followed by 0x00 bytes (OneAndZeroes Padding). The padding data is automatically stripped off when decrypting so you "do not" need to use trimZeros() on decrypted data. Use trimZeros() only to decrypt previously encrypted data before this change.

Text data encryption (ASCII/text)

It you want to encrypt string information (like text-message, or json, xml): use trimZeros method (see bellow Example 1).

Example: ECB mode, default

var bf = new Blowfish("secret key");
var encrypted = bf.encrypt("secret message");
var decrypted = bf.decrypt(encrypted);
decrypted = bf.trimZeros(decrypted); // for string/text information 
console.log(decrypted);

Binary data encryption

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.

Example 2: CBC mode (better for encrypting long messages and images).

For CBC you need additional key (CBC Vector) which length should be 8 bytes.

var bf = new Blowfish("key", "cbc");
var encrypted = bf.encrypt("secret message", "cbcvecto");
var decrypted = 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:

Example 3: with base64 encoded output

var bf = new Blowfish("key");

// Encrypt and encode to base64
var encrypted = bf.base64Encode(bf.encrypt("secret message"));
console.log(encrypted);

// Decrypt
var encrypted = bf.base64Decode(encrypted);
var decrypted = bf.decrypt(encrypted);

About

Blowfish encryption library Javascript, jquery,coffeescript (blowfish.js)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 68.6%
  • CoffeeScript 29.5%
  • HTML 1.9%