بِسْـــــــــمِ ﷲِالرَّحْمَنِ الرَّحِيم. اَللَّهُمَّ صَلِّى عَلَى مُحَمَّدٍٍ، وَعَلَى آلِهِ مُحَمَّدٍٍ


 Kali ini Tedi menerima satu kerja sekolah yang agak memeningkan di mana Tedi perlu menyulitkan satu data dari sistem front end yang menggunakan AngularJS dan kemudian nyahsulit data tersebut di bahagian back end menggunakan EJB (Enterprise JavaBeans) dan Java 8.

Penyulitan data di AngularJS menggunakan forge

Tedi bernasib baik kerana ada beberapa library yang boleh membantu Tedi mencapai matlamat tersebut. Library itu adalah forge. Memangangkan projek AngularJS ini menggunakan pengurus pakej bower maka perkara pertama adalah Tedi perlu install forge.

bower install forge --save

Kemudian Tedi perlu import forge ke dalam projek, memandangkan kami menggunakan requireJs cara import adalah seperti berikut:

 

<gambar import forge>

Seterusnya Tedi boleh menggunakan forge untuk penyulitan data seperti berikut

 

<gambar guna forge untuk sulitkan data>

Penyulitan data oleh forge menggunakan public key yang boleh kita jana menggunakan openssl. Perkara pertama ialah kita jana private key dahulu, diikuti dengan public key. Anda perlu install openSSL tetapi Tedi tidak perlu install apa-apa, tidak pasti jika Tedi pernah install openSSL sebelum ini. Tedi menggunakan sistem operasi Windows 11.

openssl genrsa -out private.key.pem 2048
openssl rsa -in private.key.pem -pubout -out public.key.pem

Seterusnya Tedi menghantar data tersulit tersebut ke back end seperti biasa.

 

Nyahsulit data di EJB menggunakan Java 8

 Untuk nyahsulit data di EJB, Tedi terpaksa isytiharkan bounty castle sebagai dependency di dalam pom.xml. Tedi gunakan versi 1.54 untuk Java 8. Jika tidak gunakan bountycastle akan ada masalah padding yang agak menjengkelkan.

<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.54</version>
</dependency>

Tedi buat satu kelas utiliti untuk penyahsulitan data daripada front end. Perkara pertama yang perlu dilakukan adalah untuk tambah BountyCastleProvider.

static {
     Security.addProvider(new BouncyCastleProvider());
}

Seterusnya Tedi add function untuk decrypt seperti berikut:

 

<gambar function decrypt>
private static final String RSA_ALGORITHM = "RSA";
private static final String RSA_CIPHER_TRANSFORMATION = "RSA/NONE/OAEPWithSHA-256AndMGF1Padding";

PRIVATE_KEY adalah daripada private.key.pem yang kita jana sebelum ini.

Sudah selesai, function tersebut boleh dipanggil di dalam projek untuk nyahsulit data daripada front end.

 

Aliran proses

Sistem front end akan sulitkan data menggunakan forge dan public key dan menghantarnya melalui API.

Back end akan menerima data tersulit tersebut dan nyah sulit menggunakan private key.

Private key hanya digunakan di back end dan jangan sesekali dikongsi kepada sistem front end. Hanya public key yang kita kongsikan kepada sistem front end.


~20250424~
jika kiriman ini bermanfaat, tolong lawat iklan yang ada ya, terima kasih