π Bidirectional encryption between Laravel (PHP) and Node.js
Share encrypted data seamlessly between your Laravel backend and Node.js services. Encrypt in Laravel, decrypt in Node.js - or vice versa!
Perfect for microservices, APIs, and hybrid applications where you need to:
- π Share encrypted data between Laravel and Node.js applications
- π Encrypt in Laravel, decrypt in Node.js (and vice versa!)
- π Build microservices that share encrypted tokens, sessions, or sensitive data
- π‘οΈ Maintain security across different technology stacks
- β Fully bidirectional - Encrypt/decrypt in both directions
- β 100% Laravel compatible (8.x - 12.x)
- β
Zero configuration - Auto-detects
APP_KEY - β Production ready - Battle-tested AES-256-CBC with HMAC-SHA256
- β
No dependencies - Lightweight with optional
php-serialize
npm install laravel-node-encryptionconst { LaravelEncrypter } = require('laravel-node-encryption');
// Automatically uses process.env.APP_KEY
const encrypter = new LaravelEncrypter();
// Encrypt data
const encrypted = encrypter.encrypt('Hello Laravel!');
// Decrypt data from Laravel
const decrypted = encrypter.decrypt(laravelEncryptedString);key- Encryption key (defaults toprocess.env.APP_KEY)cipher- Cipher method (default:'aes-256-cbc')
encrypt(value)- Encrypts any valuedecrypt(payload)- Decrypts Laravel-encrypted payloadencryptString(value)- Encrypts string without serializationdecryptString(payload)- Decrypts string without deserialization
// Laravel: Encrypt data
use Illuminate\Support\Facades\Crypt;
$userData = ['id' => 1, 'email' => 'user@example.com'];
$encrypted = Crypt::encrypt($userData);
// Send $encrypted to Node.js service...// Node.js: Decrypt data from Laravel
const { LaravelEncrypter } = require('laravel-node-encryption');
const encrypter = new LaravelEncrypter();
const userData = encrypter.decrypt(encryptedFromLaravel);
console.log(userData); // { id: 1, email: 'user@example.com' }// Node.js: Encrypt data
const encrypter = new LaravelEncrypter();
const token = { userId: 1, expires: '2024-12-31' };
const encrypted = encrypter.encrypt(token);
// Send encrypted to Laravel...// Laravel: Decrypt data from Node.js
use Illuminate\Support\Facades\Crypt;
$token = Crypt::decrypt($encryptedFromNode);
// $token = ['userId' => 1, 'expires' => '2024-12-31']Set your Laravel APP_KEY in environment:
APP_KEY='base64:your-app-key-here' node app.jsOr in .env:
APP_KEY=base64:your-app-key-here
Share authentication tokens between Laravel API and Node.js microservices:
// Node.js: Create encrypted token
const token = encrypter.encrypt({ userId: 123, scope: 'api' });
// Laravel can decrypt and validate this tokenShare session data between Laravel web app and Node.js real-time service:
// Laravel: Encrypt session
$sessionData = Crypt::encrypt(session()->all());
// Node.js WebSocket server can decrypt and use sessionEncrypt sensitive job payloads between Laravel and Node.js workers:
// Node.js: Encrypt job payload
const job = encrypter.encrypt({ email: 'user@example.com', action: 'welcome' });
// Laravel queue worker decrypts and processesconst encrypter = new LaravelEncrypter('base64:your-key-here');app.post('/decrypt', (req, res) => {
try {
const decrypted = encrypter.decrypt(req.body.encrypted);
res.json({ data: decrypted });
} catch (error) {
res.status(400).json({ error: 'Invalid encrypted data' });
}
});| Laravel | Node.js | PHP | Status |
|---|---|---|---|
| 12.x | 18+ | 8.3+ | β |
| 11.x | 18+ | 8.2+ | β |
| 10.x | 16+ | 8.1+ | β |
| 9.x | 14+ | 8.0+ | β |
| 8.x | 14+ | 7.3+ | β |
MIT Β© RenΓ© Roscher