Blowfish encryption library Javascript, jquery,coffeescript (blowfish.js)
Dieses Skript sollte nicht direkt installiert werden. Es handelt sich hier um eine Bibliothek für andere Skripte, welche über folgenden Befehl in den Metadaten eines Skriptes eingebunden wird // @require https://update.greasyfork.org/scripts/447701/1069157/javascript-blowfish.js
From: https://github.com/agorlov/javascript-blowfish/tree/d8c126defd1a82400560780ebf6ebf8c66831ea9
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).
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);
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.
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:
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);
Upd: 21.07.2018
Installation:
$ npm install agorlov/javascript-blowfish
Usage example:
const Blowfish = require('javascript-blowfish');
const key = "secret key";
const bf = new Blowfish(key);
console.log("Blowfish encrypt text by key: " + key);
// Encryption
const encrypted = bf.encrypt("Secret message. Confidentially!");
let encryptedMime = bf.base64Encode(encrypted);
console.log(encryptedMime);
// Decryption
console.log(
'decrypted: ',
bf.decrypt(
bf.base64Decode(encryptedMime)
)
);