Encrypt dan Decrypt Properties File

Kejadian ini saya alami pada saat kami akan melakukan deploy aplikasi ke production dan ternyata url databasenya berbeda dengan yang di development. Pada mesin development database berada di localhost sedangkan untuk mesin production database berada di mesin yang lain. Sehingga dengan kejadian ini membuat kami mau tidak mau harus menyimpan setting koneksi ke database pada sebuah properties file di luar war yang terbentuk. Permasalahan yang bisa timbul jika kita menyimpan konfigurasi koneksi database diluar maka orang dapat mengetahui username dan password untuk masuk ke database tersebut.

Setelah googling kesana-kemari akhirnya kami temukan 2 library yang cocok untuk memenuhi kebutuhan tersebut yaitu jasypt dan apache commons configuration. Meskipun aplikasi yang kami maintenance ditulis dengan menggunakan Groovy n Grails akan tetapi ternyata library ini dapat juga dimanfaatkan untuk bahasa Groovy. Pada bahasan ini saya akan mencoba menjelaskan tentang kombinasi dari dua library yang akan digunakan menggunakan JAVA. Adapun untuk melakukan proses encrypt-decrypt pada file properties yang sudah kita buat kita harus membuat program seperti berikut.

package herpur.web.id.blog;

import org.apache.commons.configuration.PropertiesConfiguration;
import org.jasypt.util.text.BasicTextEncryptor;

/**
 *
 * @author hape
 */
public class PropertiesEncryptMain {
    private final static String PROPERTIES_FILE_LOCATION = System.getProperty( "user.dir" ).replace( "\\", "/" )
            + "/src/main/properties/jdbc.properties";


    public static void main(String[] args) {
        final String keyUsername = "jdbc.username";
        final String keyPassword = "jdbc.password";
        final String keyEncryptedFlag = "encrypted.flag";

        try {
            // init PropertiesConfiguration 
            PropertiesConfiguration config = new PropertiesConfiguration(PROPERTIES_FILE_LOCATION);

            // get value from jdbc.properties
            String flagEncrypted = config.getString(keyEncryptedFlag);
            String strUsername = config.getString(keyUsername);
            String strPassword = config.getString(keyPassword);

            // init encryptor
            BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
            // setting password for encryptor
            textEncryptor.setPassword("HaPe");

            if (flagEncrypted.equals("0")) {

                // Encrypted password retrieve from jdbc.properties
                String strPwdEncrypted = textEncryptor.encrypt(strPassword);

                // overwrite value from jdbc.properties
                config.setProperty(keyPassword, strPwdEncrypted);
                config.setProperty(keyEncryptedFlag, "1");

                // save properties file
                config.save();
                System.out.println("Encrypt and Overwrite - Done");
            } else {
                System.out.println("Value of Properties File ");
                System.out.println("\tusername: " + strUsername);
                System.out.println("\tpassword: " + textEncryptor.decrypt(strPassword));
                System.out.println("\tf l a g : " + flagEncrypted);
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

Program yang sudah kita tulis membutuhkan library-library yang apabila ditulis dengan menggunakan maven maka akan tampak potongan source code dari file pom.xml seperti berikut.

        <dependency>  
            <groupId>org.jasypt</groupId>  
            <artifactId>jasypt</artifactId>  
            <version>1.9.0</version>  
        </dependency>  
    
        <dependency>
            <groupId>commons-configuration</groupId>
            <artifactId>commons-configuration</artifactId>
            <version>1.9</version>
        </dependency>

Setelah selesai membuat program dan library yang dibutuhkan maka kita jangan lupa untuk membuat file *.properties dimana pada tulisan ini saya menggunakan file jdbc.properties.

jdbc.username=user
jdbc.password=pwd
encrypted.flag=0

Setelah program dijalankan maka isi dari file jdbc.properties akan tampak seperti berikut.

jdbc.username=user
jdbc.password=7P83NJH0i0Wbx44ZwecLLA==
encrypted.flag=1

Apabila program dijalankan kembali maka program akan menghasilkan tampilan berikut.

Value of Properties File 
	username: user
	password: pwd
	f l a g : 1

Demikian penjelasan mengenai encrypt dan decrypt untuk properties file dengan menggunakan JAVA. Semoga bisa membantu.

Sumber: http://blog.sortedset.com/




Leave a Reply