In this article we will cover Base64 in its entirety: we will learn what Base64 is and what it is used for. We will also learn about the characters of this method, the concepts of encoding and decoding. We’ll even show you the algorithm, not just in theory, but through examples: you’ll be able to encode and decode Base64 manually and in JavaScript.
, ,

How to Encode and Decode Base64 in Node.js & TypeScript with Buffer class

Explore the fundamentals of Base64 encoding and decoding in Node.js and TypeScript using the built-in Buffer class. Learn how to convert binary data to a text-based format for secure transmission and storage, and reverse the process to retrieve the original data.

What is Base64?

Base64 is a binary-to-text encoding technique used to convert digital data into a text-based communication format. This is accomplished by converting binary data into a series of printable ASCII characters, enabling for secure transmission over a number of text-oriented protocols. When binary data, such as images or files, must be represented using just readable characters, this encoding approach is extensively utilized.

Base64 separates binary data into six-bit groups that are then mapped to specific ASCII letters. These characters were chosen with great care to ensure compatibility and secure transmission. While Base64 encoding increases data size by around one-third when compared to its original binary form, its dependability and suitability for text-based settings make it a popular technique in a wide range of applications, particularly web development.

Encoding is the process of dividing binary data into little bits and mapping them to letters such as ‘A’ to ‘Z’, ‘0’ to ‘9’, and ‘+’ and ‘/’. The padding character ‘=’ ensures that the encoded text’s length is a multiple of four, resulting in a consistent format.

While Base64 encoding does not provide encryption or security in and of itself, it is a required tool for tasks like sending binary data over URLs, embedding graphics within web pages, and attaching files to emails. It is a useful method in a wide range of computer applications due to its widespread support across programming languages and ease of use.

What is Node.js?

Node.js is an open-source, cross-platform runtime environment that allows developers to create and run server-side JavaScript applications. It is intended to be efficient and scalable, making it ideal for developing real-time web applications and APIs.

Node.js makes use of Google’s V8 JavaScript engine, which is best known for its use in the Chrome browser. However, Node.js allows developers to use V8 outside of the browser context, allowing JavaScript code to be executed on the server side.

What is TypeScript?

TypeScript is a statically typed superset of JavaScript that compiles to plain JavaScript. It was developed and is maintained by Microsoft. The main goal of TypeScript is to enhance the productivity of developers when working on large JavaScript applications by adding static types. These types make it easier to refactor code, navigate through your projects, and catch common bugs, thus making the development process more efficient. TypeScript also includes features from the upcoming ECMAScript versions like classes, modules, and interfaces. This makes it possible to write future-proof code. TypeScript code can be run on any browser or JavaScript engine that supports ECMAScript 3 or later.

Base64 Encoding and Decoding in Node.js with Buffer class

Node.js, a runtime environment based on Chrome’s V8 JavaScript engine, does, in fact, natively handle Base64 encoding and decoding.

The Buffer class in Node.js is essential for working with binary data. It supports both Base64 encoding and decoding, making the procedure as simple as possible. The Buffer class is a crucial component of the Node.js standard library, allowing developers to effectively perform a variety of operations on binary data.

The Buffer class provides the toString() method with the 'base64' encoding option for Base64 encoding. This method accepts binary data and outputs a Base64-encoded string. Similarly, the Buffer class provides the from() function with the 'base64' encoding option for Base64 decoding. This method accepts a Base64-encoded string as input and returns the binary data.

Example: String to Base64 in Node.js and TypeScript

In this example, we import the Buffer class from the ‘buffer’ module. We create a Buffer instance containing the binary data to be encoded (in this case, a UTF-8 encoded string). Using the toString('base64') method, we encode the binary data into a Base64-encoded string. Finally, we print both the original data and the Base64 encoded result to the console.

// Import the 'Buffer' class
const { Buffer } = require('buffer');

// Binary data to be encoded
const binaryData = Buffer.from('', 'utf-8');

// Encode binary data to Base64
const base64Encoded = binaryData.toString('base64');

console.log('Original Data:', binaryData.toString('utf-8'));
console.log('Base64 Encoded:', base64Encoded);

Example: Base64 to String in Node.js and TypeScript

In this example, we import the Buffer class as before. We provide a Base64-encoded string that we want to decode. Using the Buffer.from() method with the 'base64' encoding option, we decode the Base64 string back to its original binary data. Finally, we print both the Base64 encoded input and the decoded result to the console.

// Import the 'Buffer' class
const { Buffer } = require('buffer');

// Base64-encoded string to be decoded
const base64Encoded = 'QjY0RW5jb2RlLmNvbQ==';

// Decode Base64 to binary data
const decodedData = Buffer.from(base64Encoded, 'base64');

console.log('Base64 Encoded:', base64Encoded);
console.log('Decoded Data:', decodedData.toString('utf-8'));