Faster, better AI-powered code reviews. Start your free trial!  
Faster, better AI-powered code reviews.
Start your free trial!

Get high quality AI code reviews

Javascript Buffer To Base64: A Complete Guide

Table of Contents

In today’s increasingly connected world, the need to encode data into a common format for transmission between different systems is extremely important. Different programming languages and platforms handle binary data in their own way, which can make transferring things like files, images, and other binary data difficult.

This is where base64 encoding comes in. Base64 provides a way to convert binary data into simple ASCII text, allowing it to be transmitted seamlessly across different systems and languages. The Javascript language provides simple methods for base64 encoding and decoding through its Buffer class. Using these tools allows even complex binary data like files and streams to be encoded into a common format for easy transmission and storage.

Base64 encoding converts raw binary data into a set of ASCII characters that can be safely transmitted via text-based protocols. This allows binary data like images or downloaded files to be included in things like JSON configuration files, HTML documents, email attachments, and more. Base64 isn’t encryption, but it does provide a way to encode binary data into a common format that can be securely transmitted and used across nearly any system.

How Base64 Encoding Works

Base64 encoding works by taking binary data and converting it into a string composed solely of ASCII characters. This process involves breaking the binary data into 6-bit chunks, mapping each chunk to a character in the base64 alphabet, and appending the result into a string. Here is a quick overview:

Binary to Base64 Encoding Process

  • Take the raw binary data to be encoded
  • Break it into chunks of 6 binary bits (2^6 = 64 possible values)
  • Map each 6-bit chunk to an index 0-63 in the base64 character set
  • The resulting index maps to a specific base64 character
  • Append each mapped character together into a base64 string

Results in a 33% Size Increase

  • Since 6 bits of binary data are needed to create each base64 character, the total size of the output base64 string is ~33% larger than the original binary data.
  • Padding with “=” characters may be required if the binary data length isn’t evenly divisible by 6 bits.

Wide Compatibility Across Systems and Languages

  • The base64 character set uses only widely compatible ASCII symbols like A-Z, a-z, 0-9, +, /
  • This guarantees maximum compatibility across languages and systems
  • Makes base64 ideal for encoding binary data to transmit across incompatible systems

By breaking the data into 6-bit chunks and mapping each chunk to a base64 character, any binary data can be converted into a string that uses only common ASCII symbols. This allows complex binary data like images or files to be stored and transmitted through text-based systems and protocols with ease.

Base64 Encoding Use Cases

The ability to convert raw binary data into an ASCII string format makes base64 encoding useful in many scenarios:

Sending Email Attachments

  • Email protocols like SMTP are text-based and don’t handle raw binary
  • Encoding attachments into base64 allows them to be transmitted as regular email text
  • The recipient’s email client decodes the base64 back into the original binary attachment

Storing Complex Data in Text-Based Databases

  • Databases optimize for text, not binary blobs
  • Encoding binary data into base64 allows it to be stored as text
  • Useful for things like JSON configuration files, HTML image tags, etc

Securely Encoding Sensitive Data

  • Base64 encoding obscures raw binary data into ASCII text
  • Provides a basic level of security through obscurity
  • Not as secure as full encryption, but useful for things like basic auth tokens

Base64 strikes the perfect balance between data security and wide compatibility across systems. Even if base64 encoded data is intercepted, it takes an extra step to decode it back to the original binary data. This makes it ideal for securely transmitting things like sensitive authentication details through unsecured networks or protocols.

Encoding and Decoding Base64 in Javascript

Javascript provides simple methods for base64 encoding and decoding via the Buffer class. Here’s how to use the built-in Buffer to work with base64 strings:

Creating a Buffer

Instantiate a new Buffer object from a string to encode

const buffer = Buffer.from('Hello World');

Encoding to Base64

Call the buffer.toString('base64') method

const base64 = buffer.toString('base64'); // Outputs "SGVsbG8gV29ybGQ="

Decoding from Base64

  • Decoding from Base64
  • Convert back to UTF-8 string with buffer.toString('utf-8')
const buffer = Buffer.from(base64, 'base64'); const text = buffer.toString('utf-8'); // Outputs original "Hello World" string

As you can see, it only takes a few lines of code to seamlessly convert between raw strings and base64 encoded strings. Under the hood, the Buffer handles all the binary to base64 mapping and conversion for you.

Advanced Base64 Usage with Node.js

When combined with Node.js, the Buffer class allows you to easily convert entire files and binary data streams into base64 strings and back again. Here are a few examples:

Encoding File Data

  • Use fs.readFileSync() to load file data into a Buffer
const fs = require('fs');
const buffer = fs.readFileSync('image.png'); 

Encode the Buffer to base64

const base64 = buffer.toString('base64');

Decoding Base64 Back to Binary

  • Instantiate a Buffer from the base64 string
  • Write the Buffer to a file with fs.writeFileSync()
const buffer = Buffer.from(base64, 'base64');
fs.writeFileSync('image-from-base64.png', buffer); 

This allows entire files like images, documents, videos, etc to be seamlessly encoded to and from base64 strings. The file data is buffered into memory, encoded/decoded, and then written back out.

Conclusion

Base64 encoding provides a universally compatible way to encode binary data into ASCII text for transmission across incompatible systems and languages. Javascript’s Buffer class has simple methods for converting data to and from base64 seamlessly.

There are many applications for base64 encoding including email attachments, storing complex data in text-based databases, securely transmitting authentication details or other sensitive data, and more. Combined with Node.js, the Buffer class allows even entire binary files like images, videos, and documents to be encoded into base64 strings for transmission across the internet.

Sarang Sharma

Sarang Sharma

Sarang Sharma is Software Engineer at Bito with a robust background in distributed systems, chatbots, large language models (LLMs), and SaaS technologies. With over six years of experience, Sarang has demonstrated expertise as a lead software engineer and backend engineer, primarily focusing on software infrastructure and design. Before joining Bito, he significantly contributed to Engati, where he played a pivotal role in enhancing and developing advanced software solutions. His career began with foundational experiences as an intern, including a notable project at the Indian Institute of Technology, Delhi, to develop an assistive website for the visually challenged.

Written by developers for developers

This article was handcrafted with by the Bito team.

Latest posts

Mastering Python’s writelines() Function for Efficient File Writing | A Comprehensive Guide

Understanding the Difference Between == and === in JavaScript – A Comprehensive Guide

Compare Two Strings in JavaScript: A Detailed Guide for Efficient String Comparison

Exploring the Distinctions: == vs equals() in Java Programming

Understanding Matplotlib Inline in Python: A Comprehensive Guide for Visualizations

Top posts

Mastering Python’s writelines() Function for Efficient File Writing | A Comprehensive Guide

Understanding the Difference Between == and === in JavaScript – A Comprehensive Guide

Compare Two Strings in JavaScript: A Detailed Guide for Efficient String Comparison

Exploring the Distinctions: == vs equals() in Java Programming

Understanding Matplotlib Inline in Python: A Comprehensive Guide for Visualizations

Get Bito for IDE of your choice