Enkripsi data dengan Crypto-JS dalam JavaScript


CryptoJS adalah kumpulan algoritma kriptografi standar dan aman yang diimplementasikan dalam JavaScript dengan menggunakan praktik dan pola terbaik. Mereka cepat, dan mereka memiliki antarmuka yang konsisten dan sederhana.

Jika Anda memiliki masalah dengan CryptoJS, jika Anda ingin mendiskusikan fitur baru, atau jika Anda ingin berkontribusi dalam proyek ini, Anda dapat mengunjungi grup diskusi CryptoJS.

Saya ingin membuat pengambilan data sulit sampai batas tertentu, jika perangkat berakhir di tangan yang salah. Jadi data harus dienkripsi. Kode aplikasi ada di JavaScript, jadi saya mulai mencari library JS yang bisa mengenkripsi data. Saya menemukan bahwa Crypto-JS memenuhi persyaratan saya dan mudah digunakan juga.

Sebelum saya melangkah lebih jauh, saya harus mengakui bahwa pengetahuan saya tentang enkripsi dan keamanan digital pada umumnya sangat mendasar. Jadi solusi yang dibahas dalam posting ini mungkin bukan yang terbaik dalam hal melindungi data.

Seperti yang saya katakan, Crypto-JS sangat mudah digunakan. Anda bisa menggunakan algoritma cipher yang berbeda seperti AES. DES dll dan API yang sederhana. misalnya untuk mengenkripsi menggunakan AES, Anda akan memanggil -
encryptedData = CryptoJS.AES.encrypt(textToEncrypt, secretPhrase); //include aes.js script

Pada API di atas, argumen pertama untuk mengenkripsi fungsi adalah data teks yang ingin Anda enkripsi, misalnya kata sandi. Argumen kedua adalah frase rahasia (juga disebut passPhrase). Ini bisa berupa teks apapun. Ungkapan rahasia adalah kunci yang digunakan untuk mengenkripsi data. Namun Anda harus menggunakan kunci yang sama (frase rahasia) saat mendekripsi data.

Keputusan yang harus saya buat adalah bagaimana memilih frase / kunci rahasia. Sebagian besar aplikasi server-side menghasilkan kunci dan menyimpannya di lokasi yang aman di server dan menggunakan kunci tersebut untuk mengenkripsi data. Namun aplikasi saya adalah aplikasi mobile yang ditulis dalam JavaScript, jadi akan sangat mudah untuk menemukan kunci rahasia jika seseorang benar-benar ingin - dengan melihat kode sumber JS. Jadi saya memutuskan untuk meminta pengguna memasukkan kunci rahasia beserta password pada saat registrasi dan usaha login berikutnya.

Saat pengguna mendaftar untuk pertama kalinya, dia memasukkan kata kunci dan kunci rahasia / kata kunci. Dengan menggunakan kunci rahasia, saya mengenkripsi kata sandi dan menyimpannya di database lokal. Saya tidak menyimpan kunci rahasia yang dimasukkan oleh pengguna. Selanjutnya operasi login mengharuskan pengguna memasukkan kata kunci dan juga kunci rahasia yang dia masukkan saat registrasi. Masalah dengan pendekatan ini adalah pengguna harus mengingat kunci rahasia beserta kata sandinya.

Jika saya tidak ingin mengambil kata kunci dalam teks yang jelas dalam aplikasi dan jika saya tidak ingin mengenkripsi data lain dalam aplikasi ini, saya bisa menggunakan algoritma hashing, bukan enkripsi misalnya.
hashedPassword = CryptoJS.SHA256(password); //include sha256.js  script

Setelah data digabung, Anda tidak dapat mengambilnya kembali dalam bentuk aslinya. Untuk contoh password di atas, saya bisa hash password yang dimasukkan pengguna pada saat registrasi dan simpan di database. Ketika pengguna memasukkan password pada saat login, saya akan hash itu dan membandingkan nilai hash dengan yang tersimpan dalam database.

Kembali ke fungsi enkripsi, nilai yang ia dapatkan bukan string, tapi sebuah objek. Jika Anda log nilai ke konsol, ini adalah apa yang Anda dapatkan -

Namun Anda dapat menyimpan representasi string dari objek ini (dengan memanggil toString ()) dan menggunakannya dalam fungsi mendekripsi. Hal yang menarik tentang fungsi enkripsi adalah bahwa hasil enkripsi tidak sama setiap kali Anda memanggil fungsi tersebut dengan data dan kunci rahasia yang sama. Jika Anda mencatat objek yang dikembalikan oleh fungsi enkripsi di atas, Anda akan melihat tiga bidang - iv (vektor inisialisasi), kunci dan garam. Bersama-sama mereka digunakan untuk mengenkripsi data. Dan nilai-nilai ini berubah setiap kali Anda memanggil fungsi enkripsi dengan argumen yang sama (lihat demo di akhir posting ini).

Fungsi dekripsi juga sangat mudah digunakan. Anda melewati objek terenkripsi / string dan kunci rahasia ke fungsi -
decryptedData = CryptoJS.AES.decrypt(encryptedData, secretPhrase);

Nilai yang dikembalikan bukan string, tapi Obyek JS yang berisi susunan kata -
Untuk mendapatkan kembali string asli, Anda perlu memanggil toString dengan pengkodean yang benar -
originalData = decryptedData.toString(CryptoJS.enc.Utf8);

Coba demo berikut. Masukkan data yang akan dienkripsi dan kunci rahasia dan klik tombol Encrypt. Data akan dienkripsi dan ditampilkan di sebelah label Enkripsi Data. Untuk mengembalikan teks asli dari data yang dienkripsi, klik Decrypt tanpa mengubah kunci rahasia. Teks asli akan ditampilkan di samping label Data Terenkripsi.

Komentar

Postingan populer dari blog ini

Cara Hard Reset Oppo A57 Lupa Pola Tanpa Pc (Recovery)

Review P-Store.Net Situs Marketplace Terpercaya

Pedoman untuk Mengubah Hidup Kamu