https://github.com/egoroof/blowfish
Blowfish encryption library for browsers and Node.js 🐡
https://github.com/egoroof/blowfish
blowfish browser cipher encryption javascript library nodejs
Last synced: 3 months ago
JSON representation
Blowfish encryption library for browsers and Node.js 🐡
- Host: GitHub
- URL: https://github.com/egoroof/blowfish
- Owner: egoroof
- License: mit
- Created: 2017-01-08T15:04:04.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2024-09-26T22:20:50.000Z (about 1 year ago)
- Last Synced: 2025-06-25T20:36:35.542Z (4 months ago)
- Topics: blowfish, browser, cipher, encryption, javascript, library, nodejs
- Language: JavaScript
- Homepage:
- Size: 321 KB
- Stars: 54
- Watchers: 3
- Forks: 8
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Blowfish
[![npm package][npm-badge]][npm]
[npm-badge]: https://img.shields.io/npm/v/egoroof-blowfish.svg?style=flat-square
[npm]: https://www.npmjs.com/package/egoroof-blowfish[Blowfish]() encryption library for browsers and Node.js.
Find the changelog in [CHANGELOG.md](https://github.com/egoroof/blowfish/blob/master/CHANGELOG.md)
## Table of Contents
- [Installation](#installation)
- [JS modules](#js-modules)
- [Usage](#usage)
- [Example](#example)
- [Block cipher mode of operation](#block-cipher-mode-of-operation)
- [Padding](#padding)
- [Return type](#return-type)## Installation
Take latest version [here](https://unpkg.com/egoroof-blowfish) or with npm:
```
npm install egoroof-blowfish --save
```### JS modules
The library is only deployed in [native JS modules](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules), so in browsers you have to use `script` with type `module`:
```html
import { Blowfish } from 'https://your-host/blowfish.mjs';
// your code here..```
Or bundle the library to your code.
In Nodejs it imports easily:
```js
import { Blowfish } from 'egoroof-blowfish';
```## Usage
All input data including key, IV, plaintext and ciphertext should be a `String` or `ArrayBuffer` / `Buffer`.
Strings support all unicode including emoji ✨.### Example
```js
import { Blowfish } from 'egoroof-blowfish';const bf = new Blowfish('super key', Blowfish.MODE.ECB, Blowfish.PADDING.NULL); // only key isn't optional
bf.setIv('abcdefgh'); // optional for ECB mode; bytes length should be equal 8const encoded = bf.encode('input text even with emoji 🎅');
const decoded = bf.decode(encoded, Blowfish.TYPE.STRING); // type is optional
```### Block cipher mode of operation
https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation
```js
Blowfish.MODE.ECB; // (default) Electronic Codebook
Blowfish.MODE.CBC; // Cipher Block Chaining
```### Padding
http://www.di-mgt.com.au/cryptopad.html
```js
Blowfish.PADDING.PKCS5; // (default) Pad with bytes all of the same value as the number of padding bytes
Blowfish.PADDING.ONE_AND_ZEROS; // Pad with 0x80 followed by zero bytes
Blowfish.PADDING.LAST_BYTE; // Pad with zeroes except make the last byte equal to the number of padding bytes
Blowfish.PADDING.NULL; // Pad with zero (null) characters
Blowfish.PADDING.SPACES; // Pad with spaces
```### Return type
Which type of data should return method `decode`:
```js
Blowfish.TYPE.STRING; // (default) String
Blowfish.TYPE.UINT8_ARRAY; // Uint8Array
```