CARA ENKRIPSI DAN DEKRIPSI AES-128-CBC DI NODE.JS DENGAN CRYPTO

Halo semuanya, kali ini kita mau buat cara enkripsi dan dekripsi data dengan JavaScript menggunakan runtime Node.js. Module yang akan digunakan adalah module built-in bawaan Node.js, namanya crypto. Sehingga tidak perlu install module tambahan.

Kita akan melakukan enkripsi dan dekripsi menggunakan algoritma AES. AES ini singkatan dari Advanced Encryption Standard. Lebih detailnya kita akan menggunakan AES 128 bit dengan mode operasi block cipher (aes-128-cbc).

Yang dibutuhkan ketika melakukan enkripsi menggunakan module crypto ini adalah membuat chiper nya terlebih dahulu. Untuk membuat chiper, dibutuhkan 2 komponen, yaitu key dan iv. IV adalah initialization vector. Pastikan pengirim (enkriptor) dan penerima (dekriptor) menggunakan key dan iv yang sama. Jika menggunakan AES 128 bit, maka key dan iv yang digunakan harus 16 byte, atau setara dengan 16 karakter ascii.

Berikut source code cara melakukan enkripsi data.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
const crypto = require('crypto');

const cryptoAlgorithm = 'aes-128-cbc';
const key = 'abcdefghijklmnop';
const iv = '1234567890123456';

let data = 'Halo semuanya. Ini adalah pesan yang ingin dikirimkan.'

const dataCrypto = crypto.createCipheriv(cryptoAlgorithm, key, iv);
let dataCipher = dataCrypto.update(data, 'utf8', 'hex');
dataCipher += dataCrypto.final('hex');
console.log(dataCipher);

Data yang dienkripsi terdapat pada variable data (baris 7). Chiper dibuat menggunakan key dan iv yang telah didefinisikan (baris 9). Selanjutnya data akan di enkripsi menggunakan cipher tadi (baris 10). Jika fungsi final dipanggil (baris 11), artinya enkripsi sudah selesai, sehingga chiper sudah tidak bisa digunakan lagi untuk mengenkripsi data lain. Terakhir data yang sudah dienkripsi ditampilkan (baris 12).

Berikut hasil ketika source code dijalankan.

Berikut source code cara dekripsi data

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
const crypto = require('crypto');

const cryptoAlgorithm = 'aes-128-cbc';
const key = 'abcdefghijklmnop';
const iv = '1234567890123456';

let dataEncrypted = 'd06b91df0c7a06f6b0af61144fef89062d8d5eb745197506d132d2f0185e5afb0295ca96aceb040e8aa94566968724864f67bc2c564aa97c7ecc25968dfab976';

const dataDecipher = crypto.createDecipheriv(cryptoAlgorithm, key, iv);
let decryptedData = dataDecipher.update(dataEncrypted, 'hex', 'utf8');
decryptedData += dataDecipher.final('utf8');
console.log(decryptedData);

Cara kerjanya mirip enkripsi. Perbedaan ada pada pembuatan chiper. Untuk dekripsi, pembuatan yang dilakukan adalah pembuatan dechipernya (baris 9). Selain itu juga ada perubahan pada input dan output encoding (baris 10). Ketika enkripsi, inputnya UTF8 dan outputnya HEX. Sedangkan pada dekripsi, kebalikan dari enkripsi, inputnya HEX dan outputnya UTF8.

Berikut hasil ketika source code dijalankan.

Jika source code enkripsi dan dekripsi digabungkan akan menjadi.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
const crypto = require('crypto');

const cryptoAlgorithm = 'aes-128-cbc';
const key = 'abcdefghijklmnop';
const iv = '1234567890123456';

let data = 'Halo semuanya. Ini adalah pesan yang ingin dikirimkan.'

const dataCrypto = crypto.createCipheriv(cryptoAlgorithm, key, iv);
let dataCipher = dataCrypto.update(data, 'utf8', 'hex');
dataCipher += dataCrypto.final('hex');

console.log(dataCipher);

//---------------
console.log('---decrypted---');

const dataDecipher = crypto.createDecipheriv(cryptoAlgorithm, key, iv);
let decryptedData = dataDecipher.update(dataCipher, 'hex', 'utf8');
decryptedData += dataDecipher.final('utf8');

console.log(decryptedData);

Baris 9 - 11 menunjukkan proses enkripsi data. Baris 18 - 20 menunjukkan proses dekripsi data dari hasil enkripsi di baris 9 - 11.

Berikut hasil ketika source code dijalankan.

Sekian post kali ini. Untuk penjelasannya mengenai AES mungkin kalau ada yang tertarik, bisa kita pelajari dan bisa kita buatkan. Kalau ada pertanyaan bisa comment dibawah.


Salam share,


Funtastic Share

Komentar

Posting Komentar