Write an article or Share a link

Encrypting & Decrypting data with Node.js built-in library called crypto

4 years ago
Encrypting & Decrypting data with Node.js built-in library called crypto by html hints
In this Article, We’re going to see How to encrypt data with Node.js built-in library called 'crypto'. and decrypt it using that same with Node.js built-in library called 'crypto'. when necessary.

When it comes to storing anything sensitive, whether it be data or something else, you must do so safely and securely. For example, the Register/Login data must be encrypted first and then decrypted when used.

SOURCE CODE DOWNLOAD


For Demo & Source Code Scroll down.

#Creating a New Node.js Project with Crypto Dependencies

We’re going to create a fresh project to work with Crypto where you will see how to encrypt & decrypt data. To start, Execute the following command:

          
npm init -y
          
        

The above command will create a new package.json file and initialize our project. We’re going to be making use of the Node.js Crypto library for any and all cipher and decipher logic.

To install the dependency, execute the following from the command line:

          
npm install crypto --save
          
        

Finally, we need to start build our project. We have all necessary files to be used while making this. For project cleanliness, we’re going to create a Functions for all encryption and decryption that will instantiate. When we need to Encrypt or Decrypt our data

#Encrypting and Decrypting Data with an Cipher Algorithm

We’re going to be using modern JavaScript for this example which means we’re going to create an ES6 class for our encryption and decryption logic.

Create & Open the project’s crypt.js file and include following code:

          
const crypto = require('crypto');
const secret = 'appSecretKey';
const rounds = 9921;
const keySize = 32;
const algorithm = 'aes-256-cbc';
const salt = crypto.createHash('sha1').update(secret).digest("hex");
          
        

Here, we’re going to be offering synchronous and asynchronous methods for encrypting and decrypting a file. Also we define above that we going to use aes-256-cbc algorithm method.

Now, if we want to encrypt a JavaScript object on disk. If we wanted to do this synchronously, we would look at the encrypt function below:

          
function encryptData(data) {
try {
let iv = crypto.randomBytes(16);
let key = crypto.pbkdf2Sync(secret, salt, rounds, keySize, 'sha512');
let cipher = crypto.createCipheriv(algorithm, Buffer.from(key), iv);
let encryptedData = Buffer.concat([cipher.update(JSON.stringify(data)), cipher.final()]);
return iv.toString('base64') + ':' + encryptedData.toString('base64');
}
catch (err) {
console.error(err)
return false;
}
}
          
        

In the above coed, we define that we want to use an AES algorithm. Because we want to save to a file, we want to create a buffer from our plaintext data. Once we have an encrypted buffer, we can write to the file system & return a message.

We’re creating a cipher within the function. After we call cipher.final() we are not able to use the cipher in future. Because of this, we’ll get random results if we create a class variable for it and try to use it multiple times.

To decrypt this file, we would call the decrypt method:

          
function decryptData(encData) {
try {
let textParts = encData.split(':');
let iv = Buffer.from(textParts.shift(), 'base64');
let encryptedData = Buffer.from(textParts.join(':'), 'base64');
let key = crypto.pbkdf2Sync(secret, salt, rounds, keySize, 'sha512');
let decipher = crypto.createDecipheriv(algorithm, Buffer.from(key), iv);
let decryptedData = decipher.update(encryptedData);
decryptedData = Buffer.concat([decryptedData, decipher.final()]);
return JSON.parse(decryptedData.toString());
}
catch (err) {
console.error(err)
return false;
}
}
          
        

In the above function we are reading the file into a buffer, decrypting it with the AES algorithm, and returning the decrypted object back to the user.

#Here is the Example to use encrypt and decrypt data.
          
var dataObj = {};
dataObj.email = 'user@example.com';
dataObj.id = 2451;

var encrytedText = encryptData(dataObj);
console.log(`Encrypted text - ${encrytedText}`);
console.log(`Decrypted text: `);
console.log(decryptData(encrytedText));                
          
        

You just saw how to encrypt and decrypt data with the Node.js Crypto library. This is very useful & secure when you need to encrypt sensitive data. For example, let’s say we wanted to create an Register/login Application & want to save Username & Password. We could in this scenario & this to just remove all security issue.

You will get all files, when you download the source code. And after than you can edit it according to you

if you face any issues you can contact by asking question with article link.

You can go through Demo as well as Download source code for the same & make changes according to you

Node

We use cookies to ensure better User Experience. Read More