Selamat datang di Know4Share, Tempat Belajar .Net Tecnologies dan Bahasa Pemrograman Lainya- Blog dan Forum Know4Share Untuk saat Ini masih dalam tahap pengembangan, Regard Muhamad Albaijuri-

Cari Artikel

Iklan



Sabtu, 13 November 2010

Mengungkap ( Dekrip ) Hash Code yang Di Enkripsi dengan MD5

Sekilas Tentang Message Digest 5 (MD5)

Message Digest 5(MD5) adalah salah satu penggunaan fungsi hash satu arah yang paling banyak digunakan. MD5 merupakan fungsi hash kelima yang dikembangkan oleh Ronald Rivest dan di definisikan pada RFC 1321[10]. MD5 merupakan pengembangan dari MD4 dimana terjadi penambahan satu ronde dalam pemrosesan teks.

MD5 memproses string kedalam blok-blok bit sebanyak 16 buah, keluaran dari MD5 berupa 4 blok yang masing-masing 32bit yang mana akan menjadi 128bit yang biasa disebut hash.

Pada dasarnya MD5 Menghasilkan kode dengan panjang tetap (32 karakter) dari sebuah pesan yang mempunyai panjang yang tidak beraturan. Pesan yang masuk akan dipisah menjadi fragmen-fragmen dengan panjang masing-masing 512bit. Contohnya adalah nilai B, nilai B disini adalah bilangan non negatir integer, dan tidak mesti dapat dibagi oleh kalipatan 8, lalu nilai B diberi bit-bit pengganjal sedemekian rupa sehingga panjang bit kongruen denga modulo 512. Jika panjang pesan B = 320, makan pes an tersebut aka ditambah 512 menjadi 842, jadi panjang bit-bit penganjal ada 1-512 yang digunakan untuk mengganjal pesan B =320 sehinggal dapat dibagi 512.


Pesan tersebut kemudian dimanipulasi sehingga dapat dibagi dengan oleh 512. Proses manipulasi ini menambahkan 1bit ke akhir pesan, lalu menambahkan 0 sampai panjang pesan sama dengan kelipatan 512 dikurangi 64, 64 bit terakhir ini digunakan untuk menyimpan integer dari panjang pesan yang sebenarnya. Algoritma utama MD5 bekerja dalam keaadaan 128 bit, yang dibagi 4, yang masing masing 32bit word, A, B, C, D antra lain :

• A : 01 23 45 67
• B : 89 AB CD EF
• C : FE DC BA 98
• D : 76 54 32 10

mungkin sekian penjelasan singkat dari saya tentang MD5, untuk lebih jelasnya bisa googling aja :D.

sekarang saya ingin menshare sebuah Java source dengan menggunakan metode Brutu Force untuk dapat mengembalikan sebuah string input yang telah di Hash menggunakan MD5, sebenarnya banyaknya metode yang dapat di gukanan untuk mengenkrip MD5, seperti Rainbow Table dll(googling untuk lebih jelasnya :D).

Beberapa kelemahan dari Java code yang di gunakan untuk mendekrip sebuah string hasil enkripsi MD5 :
- Membutuhkan waktu yang sangat lama untuk dapat mengdekrip sebuah password atau string. dari yang saya sudah coba, saya membutuhkan waktu lebih dari 1 jam untuk mengetahui karakter asli yang sudah di enkripsi dengen MD5, namun ada sumber yang menyebutkan, proses ini dapat diselesaikan dengan waktu yang lebih singkat dengan metode Distributing/Paralel Computing, menggunakan resource lebih dari 1 komputer.
- kita tidak tahu berapa panjang karakter asli yang dienkrip menggunakan MD5 ini, karena panjang karakter asli sangat berpengaruh dari hasil dan waktu yang di butuhkan untuk mendekrip.

Java Source Code:

Source Code -Class BrutuForce- :



import java.security.*;
import java.math.*;


public class BruteForce {
char[] karakter = {
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z','0', '1', '2', '3', '4', '5', '6', '7', '8', '9','!','@','#','$','%','^','&','*','(',')','_','+','-','=','[',']','{','}',';',':','\'','"','|','\\',',','.','<','>','?','/',' '
};

String kataYgDicari;
int maxKarakter;
boolean ketemu = false;

public BruteForce(){

}

public BruteForce(String kataYgDicari,int maxKarakter) throws Exception {
int k = 0;
this.kataYgDicari = kataYgDicari;
this.maxKarakter = maxKarakter;

while (k < karakter.length && !ketemu) {
nextString(new Character(karakter[k]).toString());
k++;
}

}

public void cek(String huruf) throws Exception{
System.out.println(huruf);
if(kataYgDicari.equals(md5(huruf))){
ketemu = true;
}
}

private void nextString(String s) throws Exception {

int i = 0;

cek(s);

while (i < karakter.length && !ketemu) {
cek(s + new Character(karakter[i]).toString());

if (new String(s + new Character(karakter[i]).toString()).length() <= maxKarakter) {
nextString(s + new Character(karakter[i]).toString());
}
i++;
}

}

public String md5(String kata) throws Exception{
MessageDigest m=MessageDigest.getInstance("MD5");
m.update(kata.getBytes(),0,kata.length());

String md5 = (new BigInteger(1,m.digest()).toString(16));

if (md5.length() == 31) {
md5 = "0" + md5;
}

return md5;
}
}


Source Code - TessBrutforce - :


import java.io.*;

public class tesBruteForce {
public static void main(String[] args) throws Exception {
try {
InputStreamReader is = new InputStreamReader(System.in);
BufferedReader input = new BufferedReader(is);
System.out.print("Masukkan string yang ingin di decode: ");
String md5 = input.readLine();
System.out.print("Masukkan jumlah karakter maksimum untuk brute force: ");
int max = Integer.parseInt(input.readLine());
BruteForce b = new BruteForce(md5, max);

} catch (Exception e) {
System.out.print("Ada kesalahan Masukan");
System.exit(1);
}

}
}



Begini Cara Kerja dari Java Source diatas (Klik untuk memperbesar gambar) :




Sekian sedikit ilmu yang saya share. tolong gunakan ilmu ini dengan bijak dan tidak untuk merugikan orang lain :D

Bookmark and Share


Tidak ada komentar:

Posting Komentar