Java : Membuat Enkripsi Sendiri (Enc Rz+)

Ditulis oleh robzlabz pada Sabtu, 07 April 2012

Java : Membuat Enkripsi Sendiri (Enc Rz+). Enkripsi ini aku beri nama Rz+

Membuat enkripsi sendiri menurutku sebuah tantangan sendiri di dunia IT ini, jarang kan orang yang buat enkripsi sendiri. Walau ini adalah code untuk enkripsi tapi untuk enkripsi ini akan aku jadikan open source jadi semua orang bisa pakai. Hmm.. kalau bisa ya buat decrypt dari enkripsi ini :D

Gambar di bawah ini akan sedikit menjelaskan tentang aturan enkripsi yang aku buat

Aturan Enkripsi Rz+
Plain text adalah huruf/karakter yang lebum menjadi enkripsi atau bisa disebut sebagai karakter normal yang masih asli dan mudah dibaca. abcde jika kita buat dalam bentuk angka maka akan menjadi 1 untuk a, 2 utuk b, 3 untuk c, 4 untuk d, dan 5 untuk e.

Lalu jika dimasukan dalam fungsi enkripsi maka akan menjadi 91 0 2 1 3 2. 91 karakter awal adalah dua bilangan random yang jika dijumlahkan akan menjadi 10. Setelah bilangan random selanjutnya adalah bilangan a yang akan dirubah menjadi 0. Kenapa bisa menjadi 0? karena bilangan random yang terakhir bernilai 1 (91) artinya 1+0=1 yaitu adalah a (karakter pertama). Selanjutnya adalah 2. 2 didapat dari penjumlahan 0+2=2. karakter kedua adalah b. Selanjutnya 1. Kenapa bisa satu? karena bilangan sebelumnya adalah 2 yang jika di tambah satu maka akan menjadi 3. Selanjutnya 2 lagi. Tentunya karena 3+2=5 yaitu dia akan mencetak 5 (e huruf ke 5)

Misalnya ketika menjumpai kata "az" maka enkripsi menghasilkan 46 21 25. 46 Sebagai header menghasilkan jumlah 10 jika digabungkan (4+6=10). Selanjutnya ada 21? Loh, kok banyak banget? Marik kita lihat 21+6=27, karena alfabet hanya sampai 26 maka jika ada yang lebih dari 26 akan dikurangi dengan 26 (27-26=1) 1 akan menghasilkan nilai a. Selanjutnya adalah 25 karena karakter akhir dari 21 adalah 1 maka kita tambahkan 25 dengan angka 1.

Oke, mari mulai dengan code javanya. Pertama kali buatlah class dengan nama Encryption dan tentunya file dengan nama Encryption.java

public class Encryption {

}

lalu buat function dengan nama myEnc dengan pengembalian nilai berupa string dan parameter word bertipe string

public class Encryption {
    public static String myEnc(String word){
    )
}

untuk mempermudah penggunaan enkripsi maka kita buat kata yang dimasukan akan menjadi huruf kapital. Supaya dalam proses ASCIInya lebih mudah

word = word.toUpperCase();

Header dari enkripsi ini adalah 2 bilangan yang jika dijumlahkan adalah 10 maka mari kita membuat code untuk membuat random integer. Untuk fungsi random diambil dari java.util.Random jadi jangan lupa untuk memberikan baris import java.util.Random; di luar class Encryption

String ret;                
Random rnd = new Random();        
int rnd1 = rnd.nextInt(10);
int rnd2 = 10 - rnd1;
ret = String.valueOf(rnd1) + String.valueOf(rnd2);

Variabel ret yang bertipe String nantinya akan menjadi hasil akhir dari fungsi enkripsi ini. Setelah kita mendapatkan 2 karakter random awal dari enkripsi ini selanjutnya adalah membuat perulangan untuk membaca word yang dimasukan ke dalam fungsi ini.

for (int i=0;i<word.length();i++) {
    int w1 = ((int)word.charAt(i) - 64);
    tmp = ret.split(" ");
    String w2 = String.valueOf(tmp[i].charAt(tmp[i].length()-1));            
    int w3 = w1 - Integer.parseInt(w2);

    while(w3<0){
        w3 = 26 + w3;            
    }

    ret += " " + w3;
}

pada fungsi perulangan diatas kita memiliki beberapa variabel tambahan. Oke mulai dari perulangannya dulu. Perulangan diatas akan mengulang sebanyak kata yang dimasukan/kata yang ada dalam variabel word.


int w1 = ((int)word.charAt(i) - 64);
Variabel w1 menghasilkan nilai karakter dari suatu huruf. Misalnya word.charAt(i) bernilai a maka dia akan mengembalikan nilai berupa 1. Loh, kenapa ada (int) di depan word? Itu karena kita harus konversikan variabel yang bertipe char ke tipe integer supaya dapat diulang.

tmp = ret.split(" ");
tmp disini adalah variabel yang juga bertipe karena pembuatan variabelnya String[]tmp; Maaf, tadi belum sempat tercetak. tmp[] akan menghasilkan split dari String ret yang nantinya digunakan untuk membaca karakter sebelumnya dari ret

String w2 = String.valueOf(tmp[i].charAt(tmp[i].length()-1));
Variabel w2 menghasilkan nilai dari array tmp yang diambil dari ret. Jika ada ret bernilai 21 22 23 maka karakter akhir yang akan diambil 21 22 23 dari setiap perulangan.

int w3 = w1 - Integer.parseInt(w2);
w3 digunakan untuk mengurangi karakter dari w1. Ada juga hasil dari variabel ini bernilai minus, padahal kita tidak menginginkannya. Karena itu dibawah w3 diberikan perulangan



while(w3<0){
    w3 = 26 + w3;            
}
While disini digunakan untuk membuat agar nilai dari w3 tidak kurang dari nol.

ret += " " + w3;
hal terakhir dari perulangan ini adalah menambahkan hasil dari w3 ke dalam variabel ret.

Setelah perulangan ini selesai maka tutuplah dengan code dibawah ini


return ret;
nah, kita sudah selesai membuat function dari myEnc, jika dilihat secara penuh maka fungsi ini terlihat seperti ini

public static String myEnc(String word){
    String ret;
    String[]tmp;
    word = word.toUpperCase();

    Random rnd = new Random();        
    int rnd1 = rnd.nextInt(10);
    int rnd2 = 10 - rnd1;
    ret = String.valueOf(rnd1) + String.valueOf(rnd2);

    for (int i=0;i<word.length();i++) {
        int w1 = ((int)word.charAt(i) - 64);
        tmp = ret.split(" ");
        String w2 = String.valueOf(tmp[i].charAt(tmp[i].length()-1));            
        int w3 = w1 - Integer.parseInt(w2);

        while(w3<0){
            w3 = 26 + w3;            
        }

        ret += " " + w3;
    }

    return ret;
}
Mari sambungkan fungsi ini dengan fungsi main

public static void main(String[] args) {        
    for (int i=0;i<5;i++)
        System.out.println("Encryption : " + myEnc("abcdefghij"));

}

Compile dan akan menghasilkan
Encryption : 55 22 0 3 1 4 2 5 3 6 4
Encryption : 46 21 1 2 2 3 3 4 4 5 5
Encryption : 28 19 19 20 4 1 5 2 6 3 7
Encryption : 73 24 24 25 25 0 6 1 7 2 8
Encryption : 19 18 20 3 1 4 2 5 3 6 4

Walaupun kita memasukkan kata yang sama, namun hasil enkripsi dapat berbeda beda. Itu dikarenakan enkdipsi ini memiliki header yang random


Code Encryption.java Secara Penuh

import java.util.Random;

/**
 *
 * @author obby
 */
public class Encryption {
    public static String myEnc(String word){
        String ret;
        String[]tmp;
        word = word.toUpperCase();
        
        Random rnd = new Random();        
        int rnd1 = rnd.nextInt(10);
        int rnd2 = 10 - rnd1;
        ret = String.valueOf(rnd1) + String.valueOf(rnd2);
        
        for (int i=0;i<word.length();i++) {
            int w1 = ((int)word.charAt(i) - 64);
            tmp = ret.split(" ");
            String w2 = String.valueOf(tmp[i].charAt(tmp[i].length()-1));            
            int w3 = w1 - Integer.parseInt(w2);
            
            while(w3<0){
                w3 = 26 + w3;            
            }
            
            ret += " " + w3;
        }
                
        return ret;
    }
    
    public static void main(String[] args) {        
        for (int i=0;i<5;i++)
            System.out.println("Encryption : " + myEnc("abcdefghij"));

    }
    
}

Ayo, buat enkripsimu sendiri :)
You Probably Success

{ 0 Komentar... read them below or add one }

Posting Komentar

Label Could

Analisa (1) Assembler (4) c (1) cpp (3) Facebook (7) Fun (2) Galau (6) Hacking (1) Hardware (1) Java (7) JavaScript (4) Komik (10) My Family (1) My Life (14) My Way (8) NFC (1) NFC Hacking (1) Php (1) Program (47) Project (1) Script (1) Technology (1) Visual Basic 6 (2) Visual Basic.NET (4) What The Pufh (12)