Contoh Aplikasi Enkripsi Data di Android


Enkripsi penting karena dapat memproteksi data secara aman dari pihak lain yang tidak kamu inginkan. Enkripsi data telah menjadi topik yang ngetren di kalangan komunitas keamanan. Dikarenakan perangkat mobile kini menyimpan informasi yang semakin berharga dibanding sebelumnya, enkripsi menjadi penting untuk memastikan keamanan informasi.

Artikel ini mengenalkan API enkripsi data yang tersedia di baik Java ataupun OpenSSL. Kedua solusi tersebut dapat bekerja di sistem operasi Android.

Direkomendasikan untuk mencoba fitur-fitur dan mengkompilasi kode saat anda membaca artikel ini.

enkripsi data

Kode dan Penjelasan Enkripsi data

Hika kamu ingin mengenkripsi data di Android kamu memiliki dua pilihan: Java Crypto API dan OpenSSL API. Di bagian ini akan ditunjukkan bagaimana caranya mengenkripsi data menggunakan kedua pilihan tersebut.

Java Crypto API

Menggunakan Java Crypto API di Android sangat mudah. Pertama, kamu harus membuat kunci untuk enkripsinya. Ada class KeyGenerator di paket javax.crypto yang dapat melakukan hal ini untuk kamu.

// membuka stream untuk membaca origFilepath. Kita akan menyimpan konten yang dienkripsi ke outfile
	InputStream fis = new FileInputStream(origFilepath);		
	File outfile = new File(encFilepath);
	int read = 0;
	if (!outfile.exists())
		outfile.createNewFile();
		
	FileOutputStream encfos = new FileOutputStream(outfile);
	// Buat Cipher menggunakan "AES"
	Cipher encipher = Cipher.getInstance("AES");
	encipher.init(Cipher.ENCRYPT_MODE, mKey);
	CipherOutputStream cos = new CipherOutputStream(encfos, encipher);
		
	// cata waktu yang digunakan untuk mengenkripsi file
	start = System.nanoTime();
	Log.d(TAG, String.valueOf(start));
		
	byte[] block = new byte[mBlocksize];
		
	while ((read = fis.read(block,0,mBlocksize)) != -1) {
		cos.write(block,0, read);
	}
	cos.close();
	stop = System.nanoTime();
		
	Log.d(TAG, String.valueOf(stop));
	seconds = (stop - start) / 1000000;// untuk milidetik
	Log.d(TAG, String.valueOf(seconds));
		
	fis.close();

OpenSSL API

Mengenkripsi data di OpenSSL pada Android memerlukan menulis kode native C yang dapat diakses di Java melalui pemanggilan JNI. Ini memerlukan lebih banyak usaha namun kamu akan mendapatkan performa yang lebih bagus sebagai hasilnya.

Pertama, mari membuat kunci dan iv.

unsigned char cKeyBuffer[KEYSIZE/sizeof(unsigned char)];
unsigned char iv[] = "01234567890123456";
int opensslIsSeeded = 0;
if (!opensslIsSeeded) {
	if (!RAND_load_file("/dev/urandom", seedbytes)) {
		return -1;
	}
	opensslIsSeeded = 1;
}

if (!RAND_bytes((unsigned char *)cKeyBuffer, KEYSIZE )) {
}

Lalu, kita dapat menggunakan kunci yang dibuat (cKeyBuffer) untuk mengenkripsi sebuah file. Inisiasi EVP dengan memberikannya kunci dan iv kamu. Lalu berikan potongan-potongan byte ke fungsi EVP_EncryptUpdate. Potongan byte terakhir dari file kamu perlu dierikan ke fungsi EVP_EncryptFinal_ex.

if (!(EVP_EncryptInit_ex(e_ctx, EVP_aes_256_cbc(), NULL, cKeyBuffer, iv ))) {
	ret = -1;
	printf( "ERROR: EVP_ENCRYPTINIT_EXn");
}
	
// telusuri file, dan enkripsi
if ( orig_file != NULL ) {
   	origData = new unsigned char[aes_blocksize];
    	encData = new unsigned char[aes_blocksize+EVP_CIPHER_CTX_block_size(e_ctx)]; // potensi untuk enkripsi 16 byte lebih panjang dibanding aslinya

	printf( "Encoding file: %sn", filename);

	bytesread = fread(origData, 1, aes_blocksize, orig_file);
	// baca byte dari file, kemudian kirim ke sandi
	while ( bytesread ) {


		if (!(EVP_EncryptUpdate(e_ctx, encData, &len, origData, bytesread))) {
			ret = -1;
			printf( "ERROR: EVP_ENCRYPTUPDATEn");
		}
		encData_len = len;

		fwrite(encData, 1, encData_len, enc_file );
		// baca lebih banyak byte
		bytesread = fread(origData, 1, aes_blocksize, orig_file);
	}
	// tahap akhir enkripsi
	if (!(EVP_EncryptFinal_ex(e_ctx, encData, &len))) {
		ret = -1;
		printf( "ERROR: EVP_ENCRYPTFINAL_EXn");
	}
	encData_len = len;

	fwrite(encData, 1, encData_len, enc_file );

	// bebaskan sandi
	EVP_CIPHER_CTX_free(e_ctx);

Kesimpulan

Dengan mengimplementasikan kode seperti pada contoh di artikel ini, kamu akan dengan cepat belajar bagimana cara menggunakan baik Java Crypto API dan OpenSSL API untuk mengenkripsi data di Android berbasis Intel.

Sumber dan Artikel Terkait

* Artikel ini adalah hasil sindikasi konten dengan Intel Developer Zone. Artikel asli bisa dilihat di link ini.