A secure encryption library with browser and Node.js support using AES-256-GCM.
- 🔒 AES-256-GCM encryption
- 🌐 Works in both Node.js and browser environments
- 🔄 Key rotation support
- 📦 Zero dependencies (uses platform native crypto APIs)
- 🎯 TypeScript support
- ✨ Simple API
npm install better-cipher
# or
yarn add better-cipher
# or
pnpm add better-cipher
import { Cipher } from "better-cipher";
// Create a cipher instance with a 32-byte (64 hex characters) key
const cipher = new Cipher(
"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
);
// Encrypt
const encrypted = await cipher.encrypt("Hello, World!");
// {
// iv: '...', // 24 characters (12 bytes in hex)
// content: '...', // encrypted data in hex
// authTag: '...' // authentication tag in hex
// }
// Decrypt
const decrypted = await cipher.decrypt(encrypted);
// 'Hello, World!'
import { Cipher } from "better-cipher";
// Same API as Node.js!
const cipher = new Cipher(
"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
);
const encrypted = await cipher.encrypt("Hello, World!");
const decrypted = await cipher.decrypt(encrypted);
import { Cipher } from 'better-cipher';
const oldKey = '0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef';
const newKey = 'fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210';
// Create a rotator function
const rotator = Cipher.createRotator(oldKey, newKey);
// Re-encrypt data with new key
const oldEncrypted = /* ... previously encrypted data ... */;
const newEncrypted = await rotator(oldEncrypted);
constructor(secretKeyHex: string)
Creates a new Cipher instance.
secretKeyHex
: A 32-byte (64 hex characters) key in hexadecimal format.- Throws if key is invalid (wrong length or non-hex characters).
Encrypts a string using AES-256-GCM.
text
: The string to encrypt (can be empty).- Returns: Promise resolving to an
Encrypted
object.
Decrypts previously encrypted data.
encrypted
: AnEncrypted
object from theencrypt
method.- Returns: Promise resolving to the original string.
static createRotator(oldSecretKey: string, newSecretKey: string): (encrypted: Encrypted) => Promise<Encrypted>
Creates a key rotation function.
oldSecretKey
: The current encryption key.newSecretKey
: The new encryption key.- Returns: A function that takes old encrypted data and returns newly encrypted data.
interface Encrypted {
iv: string; // Initialization vector (hex)
content: string; // Encrypted content (hex)
authTag: string; // Authentication tag (hex, Node.js only)
}
- Node.js >= 20.0.0
- Modern browsers with Web Crypto API support
MIT