npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

ncrypt-js

v2.1.2

Published

a light weight javascript data encryption and decryption library

Downloads

4,007

Readme

NcryptJs

GitHub Actions Workflow Status Coverage Status NPM Downloads

GitHub release (latest by date) GitHub code size in bytes GitHub issues NPM

NcryptJs is a light weight javascript data encryption and decryption library. This library implements the nodejs default crypto functionality as a mid-channel cipher in addition to a simple and elegant custom data encoding and encryption algorithm.

Contents

Getting Started

This library is available through these javascript node package manager npm and yarn.

Installation

To use this library, first ensure you have a package manager initialized either with npm or yarn

# for npm use:
npm install --save ncrypt-js

# for yarn use:
yarn add ncrypt-js

To include ncrypt-js in your project. use one of these:

// ES6 and later
import ncrypt from "ncrypt-js";
// or import { ncrypt } from "ncrypt-js"

However, if you are using ECMAScript 5 and older, use the require statement:

// ES5 and older
var { ncrypt } = require("ncrypt-js");

Documentation

NcryptJs is a simple library with only two two exposed functions. This is all intentional mainly to keep everything simple. This is a complete documentation of the library and how to use it in your project. All examples work on both ECMAScript 6 (and later) and ECMAScript 5 (and older).

NcryptJs Methods

List of NcryptJs Methods.

| Methods | Description | Parameters | Return | | ------------------------------------------------------------- | -------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | | [static] randomString() | Random String. |size: number - An optional size of the generated randomBytes. enc: base64/hex - Encoding used for encoding the randomBytes defaults to base64 |encoded: string - encoded string. | | encrypt() | Encrypts data. |data: object/string/number/boolean - The data to be encrypted. |ciphered: string - encrypted data. | | decrypt() | Decrypts the encrypted or ciphered data | encodedData: string - The encrypted data: string to be decrypted. | data: string/object/number/boolean - The decrypted or original data (it might be string or object, depends on the initial input data type).

Using randomString method

The randomString() static method can generate random bytes encoded into a hexadecimal or base64 strings. This string can be useful in a variety of use cases e.g to generate database ids, to generate a unique string for a list, a unique serial strings, api keys etc.

var { ncrypt } = require('ncrypt-js'); // or import ncrypt from 'ncrypt-js'

var randomStr = ncrypt.randomString(8, 'base64');
console.log(randomStr) // t78WcmYAFOY=

// signature
ncrypt.randomString(size?: number, enc?: 'base64' | 'hex');

Using encrypt() and decrypt() methods

The encrypt() and decrypt() methods as of version 2.0.0 directly importing or invoking these methods is deprecated, an object must first be created with a secret, before the methods can then be invoked on the created object.

To encrypt and decrypt data, simply use encrypt() and decrypt() methods respectively. This will use AES-256-CBC encryption algorithm as the mid-channel cipher.

- var { encrypt, decrypt } = require("ncrypt-js");
+ var { ncrypt } = require("ncrypt-js");


var data = "Hello World!";
var _secretKey = "some-super-secret-key";

+ var { encrypt, decrypt } = new ncrypt(_secretKey);

// encrypting super sensitive data here
- var encryptedData = encrypt(data, _secretKey);
+ var encryptedData = encrypt(data);

console.log("Encryption process...");
console.log("Plain Text    : " + data);
console.log("Cipher Text   : " + encryptedData);

// decrypting the encrypted super sensitive data here
var decryptedData = decrypt(encryptedData);
console.log("... and then decryption...");
console.log("Decipher Text : " + decryptedData);
console.log("...done.");

String Encryption

var { ncrypt } = require("ncrypt-js");

var data = "Hello World!";
var _secretKey = "some-super-secret-key";

var ncryptObject = new ncrypt(_secretKey);

// encrypting super sensitive data here
var encryptedData = ncryptObject.encrypt(data);
console.log("Encryption process...");
console.log("Plain Text    : " + data);
console.log("Cipher Text   : " + encryptedData);

// decrypted super encrypted data here
var decryptedData = ncryptObject.decrypt(encryptedData);
console.log("... and then decryption...");
console.log("Decipher Text : " + decryptedData);
console.log("...done.");

Object Encryption

Encryption and decryption of JavaScript object literal has never been simpler than this.

To encrypt and decrypt JavaScript object literal, simply use encrypt() and decrypt() function from an instance. This will use AES-CBC encryption algorithm.

var { ncrypt } = require("ncrypt-js");

var _secretKey = "some-super-secret-key";
var object = {
  NycryptJs: "is cool and fun.",
  You: "should try it!"
}

var ncryptObject = new ncrypt('ncrypt-js');

// encrypting super sensitive data here
var encryptedObject = ncryptObject.encrypt(object);
console.log("Encryption process...");
console.log("Plain Object     : ", object);
console.log("Encrypted Object : " + encryptedObject);

// decrypted super sensitive data here
var decryptedObject = ncryptObject.decrypt(encryptedObject);
console.log("... and then decryption...");
console.log("Decipher Text : ", decryptedObject);
console.log("...done.");

If you are using any sort of environmental key-value store, e.g .env and for additional security, you can add the following to your environment.

# .env

# used internally to set the `key`
KEY='sshhhh this is a super secret key'

# used internally to set the `encoding` - ['base64' | 'binary' | 'hex' | 'ucs-2' | 'ucs2' | 'utf16le']
NCRYPT_ENC='hex'

SECRET='this is our hashing secret'

When creating your object, you can use the SECRET from your environment e.g:

var { ncrypt } = require('ncrypt-js');
var { encrypt, decrypt } = new ncrypt(process.env.SECRET);
...

NOTE: The secret is required to decrypt the encrypted data, if the secret used to encrypt a specific data is lost, then that data cannot be decrypted.

Same goes for encoding, if data was encrypted using hex encoding format, decrypting with a base64 encoding or other encoding format and vise versa will not work

Built With

Written in TypeScript, built into ECMAScript 5 using the TypeScript compiler.

Contribution

To contribute, simply fork this project, and issue a pull request.

Versioning

We use SemVer for version management. For the versions available, see the tags on this repository.

Authors

  • Chukwuemeka Ajima - Initial work - ajimae

License

This project is licensed under the MIT License - see the LICENSE file for details

Acknowledgments

  • This library was developed to simplify how data is encrypted and decrypted in javascript.
  • Made available by open source and special thanks to Shahid for his super simple article on node core encryption (crypto) library.
  • Thanks to danang-id whose README was very insightful and Jorgeblom for his custom cipher algorithm on this stackoverflow answer