Decrypt Tokopedia Buyer Info from secret content response
Halo, kali ini saya akan membagikan contoh salah satu penggunaan class java.crypto.Chiper untuk mendecrypt data yang diperoleh dari response tokopedia seller api.
(kalian bisa mempelajari lebih lanjut di link berikut: https://developer.tokopedia.com/openapi/guide/#/encryption/
Tutorial kali ini hanya fokus pada fungsi decryption, sehingga jika kalian ingin mengintegrasi aplikasi kalian dengan tokopedia, mungkin konten kali ini dapat membantu kalian pada bagian decryprtion.
Sebelumnya kalian harus register public key kalian terlebih dahulu dengan mengikuti langkah-langkah berikut:
1. Download script here
2. Run script generate public_key.pub private_key.pem
3. Upload via API using Postman
POST /v1/fs/:fs_id/register?upload=1
Decryption Process
Step#1
Pada ilustrasi diatas kita perlu mengunduh private_key kita ke dalam aplikasi. Khusus untuk pemrograman menggunakan java kita perlu meng-convert terlebih dahulu private_key.pem menjadi PKCS8 private key (ref).
Bisa menggunakan link berikut: https://decoder.link/rsa_converter
Sebagai contoh program kali ini kita lakukan manual saja dengan meletakkan private_key secara hardcode.
private static PrivateKey readPrivateKey() throws Exception {
String privateKeyPEM = “xxxxx”;
byte[] encoded = Base64.decodeBase64(privateKeyPEM);
KeyFactory keyFactory = KeyFactory.getInstance(“RSA”);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(encoded);return keyFactory.generatePrivate(keySpec);
Step#2
Selanjutnya kita mendecrypt secret, yaitu mendecode dengan base64 terlebih dahulu lalu menggunakan RSA OAEP 256
private static byte[] decryptSecret(String encryptedSecret) throws Exception{
byte[] secret=null;
PrivateKey rsaPrivateKey = readPrivateKey();
Cipher cipher = Cipher.getInstance(“RSA/ECB/OAEPPadding”);
OAEPParameterSpec oaepParams = new OAEPParameterSpec(“SHA-256”, “MGF1”, new MGF1ParameterSpec(“SHA-256”), PSource.PSpecified.DEFAULT);
cipher.init(Cipher.DECRYPT_MODE, rsaPrivateKey, oaepParams);
secret = cipher.doFinal(Base64.decodeBase64(encryptedSecret));return secret;
}
Step#3
Langkah akhir kita mendecrypt content dengan menggunakan AES GCM dan secret key yang telah di-decrypt pada langkah sebelumnya
private static String decryptContent(byte[] cipherText, SecretKey key, byte[] IV) throws Exception{
Cipher cipher = Cipher.getInstance(“AES/GCM/NoPadding”);
SecretKeySpec keySpec = new SecretKeySpec(key.getEncoded(), “AES”);
GCMParameterSpec gcmParameterSpec = new GCMParameterSpec(128* 8, IV);
cipher.init(Cipher.DECRYPT_MODE, keySpec, gcmParameterSpec);
byte[] decryptedText = cipher.doFinal(cipherText);return new String(decryptedText);
}
Selamat, return string dari step#3 merupakan json string yang merupakan data buyer_info. Terimakasih