Menggunakan MD5 di Java

Kamu tau fungsi hash?? Hmmm.. mustinya tau yah, jadi gw gak usah nulisin lagi di mari. Intinya, fungsi hash itu fungsi satu arah buat ngubah suatu string. Fungsi ini banyak digunain buat nyimpen password di database. Jadi, sebelum passwordnya dimasukin ke database, diubah dulu bentuknya pake fungsi hash, baru disimpen. Jadi… bahkan orang yang punya akses database-nya gak bakal tau password dari user terkait. Dan fungsi hash paling dikenal itu… MD5! Kenapa?? Gak ngerti jugak deh. Mungkin ada hubungannya sama pemanggilannya yang gampang di php. Kamu tinggal gunain:

string md5 ( string $str [, bool $raw_output = false ] )

Contohnya,

<?php
$str = 'apple';

if (md5($str) === '1f3870be274f6c49b3e31a0c6728957f') {
    echo "Would you like a green or red apple?";
}
?>

Tapi… berhubung gw lagi gak bicarain php, jadi… kita ganti bahasa! Di postingan ini, gw bakal tulisin contoh pemakaian md5 di java. Di java sendiri, pemakaiannya jugak gak sulit2 amat coz kamu gak usah bikin fungsi md5 dari awal. Ada class MessageDigest dari package “java.security”yang bisa kamu gunain di sini. Sayangnya, masukan dari fungsi md5 bukan string… jadi musti convert dulu ke dalam bentuk array of byte.

Dan pemakaiannya kira2 pake kode gini:

import java.security.MessageDigest;
…
String pesan = “pesan kamu”;
byte[] bytePesan = pesan.getBytes();
MessageDigest md = null;
try {
      md = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException ex) {
      Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
byte[] hasil = md.digest(bytePesan);

Dan “hasil” merupakan bentuk md5 dari pesan kamu. Cuma ajah, masih dalam bentuk byte. Hasil ini bisa kamu ubah ke dalam bentuk String pake method “toString” yang (kemungkinan) bakal nampilin alamat dari si array of byte. Atau kamu bisa ubah ke dalam bentuk string lagi pake kode:

byte[] hasil = md.digest(bytePesan);
String pwd = new String(hasil);

Tapi… sayangnya, ini gak bisa kamu lakuin… coz hasilnya bakal jadi gini:

1. Hasil Password

Jadi… gimana caranya supaya string dari hasil fungsi md5 itu muncul?? Caranya ngerubah bentuk byte itu ke dalam format hexa. Gampangnya, sediain 1 fungsi dengan masukan byte dan keluaran String:

    private static String byteArrToString(byte[] b) {
        
        StringBuilder sb = new StringBuilder(b.length * 2);
        for (int i = 0; i < b.length; i++) {
            int j = b[i] & 0xff;
            if (j < 16) {
                sb.append('0');
            }
            sb.append(Integer.toHexString(j));
        }
        String res = sb.toString();
        return res.toUpperCase();
    }

Dan bisa digunain gini:

        byte[] hasil = md.digest(bytePesan);
        String password = byteArrToString(hasil);

2. Hasil Fungsi Hash

Lengkapnya:

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Arby
 */
public class Main {

    public static void main(String[] args) {
        Scanner x = new Scanner(System.in);
        System.out.print("Masukkan kata: ");
        String pesan = x.nextLine();

        byte[] bytePesan = pesan.getBytes();
        MessageDigest md = null;
        try {
            md = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
        byte[] hasil = md.digest(bytePesan);
        
        String password = byteArrToString(hasil);
        System.out.println(password);
    }

    private static String byteArrToString(byte[] b) {
        
        StringBuilder sb = new StringBuilder(b.length * 2);
        for (int i = 0; i < b.length; i++) {
            int j = b[i] & 0xff;
            if (j < 16) {
                sb.append('0');
            }
            sb.append(Integer.toHexString(j));
        }
        String res = sb.toString();
        return res.toUpperCase();
    }
}

Sumber:
http://stackoverflow.com/questions/415953/generate-md5-hash-in-java
https://platform.netbeans.org/tutorials/60/nbm-login.html

Valid: Yap…
Kadaluarsa: Sampe method dari class MessageDigest dinyatain deprecated

Advertisements

2 thoughts on “Menggunakan MD5 di Java

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