RSA Encryption dengan JAVA

Bismillah,

Kegunaan dan perbedaan transformasi data dapat di lihat di sini

Pada kesempatan kali ini penulis akan membuat tutorial pembuatan metode enkripsi dengan JAVA.

Buat terlebih dahulu folder : C:/RSA_Dengan_JAVA (silahkan dengan nama apapun dan di direktori manapun)

Buat sebuah kelas : Silahkan namakan sendiri, dikarenakan penulis menggunakan metode static yang tidak perlu adanya inisialisai kelas. Dan hanya dikerjakan di satu kelas.

Buat method untuk membuat Key dan Certificate

private static void membuatKeyDanCertificate(String alias, String namaDepan,
String namaBelakang, String divisi, String perusahaan, String negara,
String passwordKunciDef, String keyStore) {
try {
// Memanggil fungsi tools JAVA
String perintahKey = "C://Program Files/Java/jdk1.6.0_23/bin/keytool -genkey -alias " + alias + " -keyalg RSA -dname \"nama=" + namaDepan + " " + namaBelakang + ", bagian=" + unit + ", perusahaan=" + organisasi + ", wargaNegara=" + negara + "\" -keysize 1024 -keypass " + passwordKunci + " -keystore " + keyStore + " -storepass Ultimate10";

System.out.println(perintahKey);
Process proses = Runtime.getRuntime().exec(perintahKey);
proses.waitFor();

// Membuat Keystore.jks
// (Keystore.jks akan di generate di dalam folder utama JAVA) jika ada masalah di dalam pengambilan key silahkan menambahkan path direktori letak dari file Keystore.jks)
KeyStore ks = KeyStore.getInstance("JKS");
FileInputStream fis = new FileInputStream("KeyStore.jks");
ks.load(fis, new String("Ultimate10").toCharArray());
System.out.println(ks.toString());

// Membuat Certificate dengan nama alias
Certificate crt = ks.getCertificate(alias);
byte[] buffer = crt.getEncoded();
FileOutputStream os = new FileOutputStream("C:/RSA_Dengan_JAVA" + alias + ".crt");

Writer wr = new OutputStreamWriter(os, Charset.forName("UTF-8"));
wr.write("-----BEGIN CERTIFICATE-----\n");
wr.write(new sun.misc.BASE64Encoder().encode(buffer));
wr.write("\n-----END CERTIFICATE-----\n");
wr.close();

os.close();

} catch (IOException e) {
System.out.println(e);
} catch (InterruptedException e) {
System.out.println(e);
} catch (CertificateException e) {
System.out.println(e);
} catch (KeyStoreException e) {
System.out.println(e);
} catch (NoSuchAlgorithmException e) {
System.out.println(e);
}
}

Kemudian buat metode untuk enkrip

private static void membuatEnkripFile(String alias, String fileSertifikat, String fileEnkripsi) {
try {
// Pemanggilan file sertifikat
FileInputStream is = new FileInputStream(fileSertifikat);
CertificateFactory cf = CertificateFactory.getInstance("X.509");
Certificate crt = cf.generateCertificate(is);
PublicKey pk = crt.getPublicKey();
File enc = new File("C:/RSA_Dengan_JAVA" + fileEnkripsi);

// String yang akan di enkrip
String A = "Harry Kurniawan - IK 342";

// Inisialisasi RSA Algoritma dan pembuatan file .enc
Cipher enkripsi = Cipher.getInstance("RSA");
enkripsi.init(Cipher.ENCRYPT_MODE, pk);
OutputStream osCip = new FileOutputStream(enc);
osCip = new CipherOutputStream(osCip, enkripsi);
byte[] buff = new byte[1024];
buff = A.getBytes();
osCip.write(buff);
osCip.close();
System.out.println("String Awal " + A);
System.out.println(crt);
System.out.println("Enkripsi sukses");
} catch (Exception e) {
System.out.println(e);
}
}

Terakhir untuk dekripsi

private static void membuatDekripsi(String alias, String fileKeystore, String fileEnkripsi) {
String B = null, C = null;
try {
// Pemanggilan file sertifikat
FileInputStream fis = new FileInputStream(fileKeystore);
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(fis, new String("Ultimate10").toCharArray());
Key kunci = ks.getKey(alias, new String("Ultimate10").toCharArray());
PrivateKey pk = (PrivateKey) kunci;

// Inisialisasi RSA Algoritma dan pendekripsian file .enc
File enc = new File("C:/RSA_Dengan_JAVA" + fileEnkripsi);
byte[] buffer = new byte[1024];
byte[] buffer2 = new byte[1024];
int n = 0, m = 0;
Cipher dekripsi = Cipher.getInstance("RSA");
dekripsi.init(Cipher.DECRYPT_MODE, pk);
InputStream isEnc = new FileInputStream(enc);
InputStream isEnc2 = new FileInputStream(enc);

isEnc = new CipherInputStream(isEnc, dekripsi);

while ((n = isEnc.read(buffer)) >= 0 && (m = isEnc2.read(buffer2)) >= 0) {
B = new String(buffer, 0, n);
C = new String(buffer2, 0, m);
}
isEnc.close();
System.out.println("Enkrip File " + C);
System.out.println("String Dekrip " + B);// osPla.close();
System.out.println("Dekripsi sukses");
} catch (Exception e) {
System.out.println(e);
}
}

Tinggal dijalankan

public static void main(String args[]) throws IllegalBlockSizeException, BadPaddingException, InvalidKeyException, NoSuchAlgorithmException, NoSuchProviderException, NoSuchPaddingException, InvalidKeySpecException, UnsupportedEncodingException {
membuatKeyDanCertificate("harry", "Harry", "Kurniawan", "Tukang Kebun", "EDII", "ID", "Ultimate10", "KeyStore.jks");
new Timer().schedule(new TimerTask() {
@Override
public void run() {
membuatEnkripFile("harry", "harry.crt", "pesan.enc");
}
}, 5000);
new Timer().schedule(new TimerTask() {
@Override
public void run() {
membuatDekripsi("harry", "KeyStore.jks", "pesan.enc");
}
}, 7000);
}

Sekian, Semoga bermanfaat.🙂

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s