Widget HTML Atas

Decrypt Enkripsi VCLAIM v2 Dengan PHP

 

martinsetiawan.com. BPJS kesehatan membuat sistem bridging vclaim versi 2.0. Update bridging vclaim sangat ditunggu-tunggu oleh developer simrs yang sudah terlalu bosan dengan service vclaim v1.0, apalagi BPJS juga pasang target januari tahun depan web service vclaim versi 1 akan dimatikan. Hal ini membuat developer simrs makin bergelora. 

For your information, bridging vclaim versi 1.0 dirilis sekitar tahun 2016 (mungkin), sedangkan aplikasi vclaim diperbarui setiap saat sehingga ada gap yang sangat besar antara aplikasi vclaim dengan bridging. Sampai-sampai dulu tahun 2018 ketika saya mengisi materi bridging vclaim ada yang under estimate, vclaim saja sudah versi 1.7, bridgingnya kok versi 1. 

Saya sendiri maklum karena yang hadir diacara pelatihan tersebut sebagian besar bukan IT-nya, tetapi perekam medis. Kalau yang bilang orang IT kok mbangeti banget ya .

Tapi jangan senang dulu, bukan BPJS namanya kalau bridging ini mudah didevelop. Inilah kerennya BPJS, selalu memberi tantangan buat programmer rumah sakit untuk mengembangkan skillnya.

Kalau dulu jaman bridging versi 1 saya sempat terkagum-kagum dengan istilah baru seperti web services, json, cons-id, secretkey, token, expired service dll, sekarang lebih banyak lagi. Ada user key, lzstring, aes cbc pokoknya banyak hal baru yang bisa kita dapatkan dari BPJS.

Karena itu jangan mengeluh, yang penting ikuti petuah dari BPJS dan jangan lupa berdoa supaya diberi ilmu yang bermanfaat, insyaallah diberi kelancaran dalam membuat bridging vclaim, baik membuat sendiri maupun dibuatkan.

Service Baru di Vclaim v2

Banyak sekali service baru yang ada di bridging vclaim v2. Berita bagusnya, bridging vclaim v2 mendekati cara pembuatan sep di aplikasi vclaim. Berita buruknya, banyak sekali tambahan parameter yang harus dilakukan. Service yang berubah antara lain:

1. Penerbitan SEP.

Perubahan ini ada pada pembuatan, edit, hapus dan ada data induk kecelakaan di pencarian data suplesi (sampai sekarang saya belum paham tentang suplesi).

2. PRB.

Kalau tidak salah dulu sudah ada PRB, tapi entah kenapa kok saya tidak membuatnya dan baru kali ini saya membuka-buka lembaran service PRB. Semoga saja bisa dikembangkan dengan mudah.

3. Pembuatan Rujukan.

Banyak sekali service baru di pembuatan rujukan. Kalau tidak salah informasi dari mas Ghani BPJS, di versi 2.0 ini akan ada bridging pembuatan rujukan khusus yang biasa dilakukan di klinik hemodialisa. Waktu saya intip memang banyak sekali service baru yang berhubungan dengan rujukan khusus.

4. Rencana Kontrol

Service ini pasti sangat dinanti-nantikan juga ya? Soalnya service rencana kontrol sangat membantu sekali supaya nggak double entry. Seperti yang kita tahu bersama, beberapa waktu lalu BPJS meminta rumah sakit untuk mengisi admisi dan surat kontrol di aplikasi vclaim. Fitur ini katanya membantu rumah sakit, tapi menurut saya kok malah menyusahkan ya? karena kita harus entry dua kali, di aplikasi SIMRS dan aplikasi Vclaim.

Bagaimana teman-teman, menarik bukan? dengan membuat bridging vclaim versi 2.0, user sangat terbantu karena tidak perlu mengisi di dua aplikasi yang berbeda, User puas, kita yang lemas hahaha.

Enkripsi dan Kompresi String

Entah apakah memang sudah jadi roadmap BPJS atau karena kasus yang sempat muncul kemarin. Meskipun kita tidak tahu apakah datanya memang bocor dari BPJS atau bukan, yang pasti sih bukan dari web service yang dikonsumsi oleh rumah sakit, soalnya saya tidak menemukan format data seperti yang ramai di internet. 

Sebenarnya update ini sangat bagus, saya sangat mendukung. Tapi mbok ya pakai enkripsi yang bisa dibuat dengan bahasa pemrograman visual basic 6 😭. gini-gini pemakai visual basic 6 masih banyak lho!

Saya sadar, meskipun termasuk bahasa yang canggih pada masanya, visual basic 6 adalah bahasa pemrograman dari 23 tahun yang lalu. Saya tidak memaksa, hanya berharap. Kalau tidak bisa ya tidak apa-apa, kita mah nurut sama BPJS, wong nuntut juga nggak bisa, siapa elu 😆.

 AES 256 mode CBC

dimasa kini, AES 256 sudah sangat jamak digunakan dalam enkripsi. Hampir semua bahasa pemrograman modern sudah punya library atau fungsi build in, tapi tidak dengan visual basic 6. Jaman segitu enkripsi sepertinya belum populer, buktinya dosen saya tidak mengajarkan. Saat ini enkripsi data seakan sudah menjadi hal wajib dalam pertukaran data lewat internet. Chattingan whatsapp dan telegram saja dienkripsi, masak data penting nggak dienkripsi?

Lz-string

Lz-string adalah tehnik kompresi data yang dikembangkan untuk javascript. dengan lz-string, data menjadi lebih kecil dan bisa disimpan di local storage berkapasitas kecil tanpa khawatir storagenya meledak. Contoh penerapannya adalah di aplikasi untuk perangkat mobile (handphone).

Contekan Dari IT BPJS

Sebenarnya IT BPJS sudah memberikan contoh beberapa bahasa pemrograman yang bisa langsung kita salin. Supaya sesuai dengan judul, saya mencontohkan kodingan yang saya dapat dari aplikasi trust-mark BPJS Kesehatan. Aplikasi trust-mark adalah aplikasi katalog web service dari BPJS. Berikut ini kodingnya:

 

Alhamdulilah ya, tim IT BPJS baik sekali, kita tidak perlu bersusah payah mencari kodingannya. Tapi kok nggak ada yang visual basic 6 sih pak? hahaha ngarep lagi nih 😓. 

Setelah di salin, coba jalankan aplikasinya! Dan, deng dong keluar error ya? kalau nggak keluar error berarti sakti. Soalnya librarynya kan belum diinstall. 

Install Library LZ-String

untuk menginstall library lz-string, kita harus menginstall composer terlebih dahulu. Sebenarnya tanpa composer juga bisa, tetapi lebih ribet. Selain itu seorang murid itu harus taat pada gurunya. Karena itu saya mengikuti cara yang ada ditutorial, meskipun tidak dijelaskan secara eksplisit, melihat ada folder vendor, saya menduga bahwa tim IT BPJS menggunakan compresor, eh composer. 

Cara menginstall lz-string dengan composer sangat mudah. Saya menggunakan teks editor visual code yang sangat membantu sekali, soalnya disitu kita bisa mengakses command prompt secara langsung. Fitur ini bernama "terminal", seperti nama command prompt di linux ya, saya jadi merasa keren.

buka terminal di visual code, lalu masukkan perintah dibawah ini kemudian tekan enter:

composer require nullpunkt/lz-string-php

tunggu beberapa saat sampai prosesnya selesai. Setelah itu akan kita dapati folder vendor, file composer.json dan  composer.lock.

 

file dec.php bukan dari composer ya. file dec.php adalah file php buatan saya yang berisi salinan source code contoh dari BPJS.

Key Dekripsi dan Respon terenkripsi

AES 256 menggunakan key untuk proses enkripsi dan dekripsinya. Key yang digunakan adalah perpaduan dari "consid + conspwd + timestamp request (concatenate string)". Bingung nggak? nggak usah bingung, cara bikinnya gampang kok, kalau di bahasa pemrograman PHP hanya seperti ini:

$key = cons_id.secretkey.stimeStamp;

Sekarang balik lagi ke contoh source code dari IT BPJS diatas, perhatikan baris kelima yang berisi:

function stringDecrypt($key, $string){

$key adalah kunci dekripsi seperti yang saya tulis diatas, sedangkan string adalah respon dari web service BPJS yang akan didekripsi.

Proses Dekripsi dan Dekompresi

Untuk menjadikan respon dari web service Vclaim menjadi sesuatu yang bisa kita baca adalah dengan mendekrypt dan dekompresi. Ada beberapa teman pernah curhat, sudah mengikuti petuah dari BPJS kok masih gagal mendecrypt datanya.

Sebenarnya dia sudah berhasil mendecrypt data, tetapi dia melupakan satu hal. Selain didecrypt, data tersebut harus didekompres. 

Fungsi decrypt ada di baris ke-5, sedangkan fungsi dekompresi ada di baris 23. maka urutannya adalah

1. Decrypt response web service Vclaim dengan key yang kita punya.

2. Dekompresi

Kesimpulan

Sebenarnya cara mendecrypt dan dekompresi data dari bridging vclaim v2 sangat mudah, asalkan kita menggunakan bahasa pemrograman yang lebih modern dari visual basic 6. Bukan karena visual basic 6-nya nggak mampu, tapi akunya yang nggak paham. Mungkin dibelahan bumi nan jauh disana ada seorang expert visual basic 6 yang bisa membuat enkripsi aes 256 dan lz-string? Wallahu a'lam.

Alhamdulilah akhirnya saya buat juga tutorial ini, kemarin ada beberapa teman yang meminta tapi belum sempat saya buat. Feel free to ask tentang bridging vclaim v2 ini, meskipun saya belum membuatnya saya sangat terbuka untuk berdiskusi dan belajar tentang bridging vclaim. Tetapi kalau kalian pengennya belajar tentang  biologi, jangan dengan saya. Saya ada teman nih, satu tongkrongan dikelasnya istriku. dia seorang guru biologi, cocok kan kalau mau bertanya tentang biologi. Namanya  teh Fira

Beli Durian Di Jepara, Semoga Berhasil Ya.


 

 






5 comments for "Decrypt Enkripsi VCLAIM v2 Dengan PHP"

  1. pak, stimeStamp itu formatnya sperti apa yah? terimakasih pak.

    ReplyDelete
  2. om boleh liat semua file dec.php nya

    ReplyDelete
    Replies
    1. Itu diatas sudah ada pak, sy pakai github gist

      Delete
    2. ane buat begini kenapa error yah om

      function stringDecrypt($key, $string)
      {

      $encrypt_method = 'AES-256-CBC';
      // hash
      $key_hash = hex2bin(hash('sha256', $key));
      // iv - encrypt method AES-256-CBC expects 16 bytes - else you will get a warning
      $iv = substr(hex2bin(hash('sha256', $key)), 0, 16);
      $output = openssl_decrypt(base64_decode($string), $encrypt_method, $key_hash, OPENSSL_RAW_DATA, $iv);
      return \LZCompressor\LZString::decompressFromEncodedURIComponent($output);
      }

      $key = $ConfVclaim->consid().$ConfVclaim->secretkey().$ConfVclaim->tStamp();
      $response = stringDecrypt($key);

      file lengkapnya di sini om
      https://pastebin.com/QTFgDSsM

      Delete

Post a Comment