Encryption

Introduction

Encrypting values is important and Supercharge comes with a built-in utility to encrypt data. By default, Supercharge uses AES-256 encryption.

Configuration

Supercharge ships with an encryption utility available via @supercharge/framework/encryption. By default, this encryption module uses your application key defined in config/app.js. The app key will be generated during the application setup when using the Supercharge installer. If you don’t have an app key set, use the node craft key:generate command to create one.

Usage

Encrypting Values

Encrypting values uses the AES-256-CBC cipher. Import the encryption utility and use the .encrypt() method:

const Encryption = require('@supercharge/framework/encryption')

const encrypted = Encryption.encrypt('value')

In case you need to encrypt data using another key than your app key, you should create a dedicated instance passing the key as the first argument:

const encrypter = new Encryption('your-encryption-key')
const random = encrypter.encrypt('value')

Decrypting Values

The encryption utility provides a .decrypt() method to decrypt values:

const Encryption = require('@supercharge/framework/encryption')

const encrypted = Encryption.decrypt('encrypted-string')

Again, you can also create your own instance that should use your custom encryption key to decrypt values:

const encrypter = new Encryption('your-encryption-key')
const encrypted = encrypter.decrypt('encrypted-string')

HMAC

To calculate the HMAC of the input string, use the .hmac() method on the encryption utility:

const hmac = Encryption.hmac('string')

Base64 Encoding

The encryption module also supports base64 encoding for strings and buffer:

const encoded = Encryption.base64Encode('value')
// or
const encoded = Encryption.base64Encode(Buffer.from('value'))

Base64 Decoding

You can also decode a given base64 string:

const string = Encryption.base64Decode(encodedBufferOrString)

Generating Random Strings

In various situations, you may want to generate a random string. The encryption utility provies a .randomKey() method to generate a random key:

const random = Encrypt.randomKey() // creates a 20-character string

You may also pass the number of bytes as an argument to the .randomKey() method:

const random = Encrypt.randomKey(41) // creates a 41-character string