Contoh Program Source Code /

Algoritma SHA Dengan Java

Posted on1/07/2016
Join with us

Algoritma SHA Dengan Java

Fungsi Hash adalah sebuah algoritma yg mengubah text / message jadi sederetan karakter acak yg punya jumlah karakter yg sama. Hash juga termasuk salah satu bentuk teknik kriptografi & dikategorikan sebagai kriptografi tanpa key (unkeyed cryptosystem). Selain itu hash punya nama lain yg juga dikenal luas yaitu “one-way function”.

Kita sering sekali menjumpai hash di website-website yg menyediakan layanan untuk download file /pun program secara resmi. Hash memang umumnya digunakan untuk mengecek integritas dari sebuah pesan / file. File / pesan yg sudah berubah akan punya nilai hash yg berbeda. Sebagai contoh, dg sebuah algoritma hash, pesan'hello' akan memberikan nilai hash 12345 sedangkan pesan 'hallo' punya nilai hash83746. dg kata lain output hash dari kata 'hello' tidak akan sama dg 'hallo'. Bahkan sekalipun dalam kacamata kita kedua pesan tersebut terlihat hanya punya perbedaan sedikit saja, namun nilai hash yg dimiliki oleh kedua pesan tersebut sangat jauh berbeda.

Algoritma SHA Dengan Java
Algoritma SHA Dengan Java

Fungsi hash SHA adalah sekumpulan fungsi hash didesain oleh National Security Agency & dipublikasikan oleh NIST sebagai U.S Federal Information Processing Standard (FIPS). SHA adalah singkatan dari Secure Hash Algorithm. SHS (Secure Hash Standard) adalah standar yg mendefinisikan SHA. Ada banyak versi SHA. SHA-0, SHA-1, SHA-2. Se&gkan untuk SHA-2 terbagi lagi jadi SHA-224, SHA-256, SHA-384, and SHA-512. Di sini hanya akan dibahas mengenai SHA-1. SHA-1 menghasilkan 160 bit message diggest dari pesan yg panjangnya kurang dari 264 bit. SHA-1 hampir mirip dg MD4 tetapi dg beberapa perubahan.

Berbeda dg teknik enkripsi dalam kriptografi, tujuan hash memang mengubah sebuah pesan yg dapat dibaca (readable text) jadi pesan acak (unreadable text) sama seperti enkripsi, namun hal mendasar yg jadi perbedaan dari hash adalah pesan yg telah acak tadi tidak dapat diubah kembali jadi pesan yg seharusnya. Inilah mengapa hash disebut juga sebagai “one-way function“.

Algoritma SHA Dengan Java

Ketika pertama kali belajar konsep hash, enkripsi, & dekripsi, saya mencoba bersikap kritis dg mengambil hipotesis bahwa dg algoritma yg tepat, hash pasti dapat dibalikkan (reverse). dg kata lain keyakinan saya terhadap dekripsi sebuah fungsi hash sangat besar. Namun, keyakinan saya tidak terbukti. Penjelasannya seperti ini:

Misalkan ada pesan ‘Hello’, pesan ini akan kita hash dg algoritma yg sederhana, yaitu pertama-tama huruf-huruf tersebut akan kita ubah kedalam bilangan angka.
a jadi 1
b jadi 2
c jadi 3
dst…
Sehingga pesan 'hello' akan jadi '8.5.12.12.15'. Kemudian kita jumlahkan bilangan-bilangan tersebut sehingga kata 'hello' akan menghasilkan jumlah 52.
h e l l o 8 + 5 + 12 + 12 + 15 = 52
Kemudian langkah terakhir adalah kita ambil satu digit yg paling belakang sebagai nilai hashnya, yaitu 2. Nah nilai hash 2 ini bukankah bisa dibuat dari banyak kombinasi huruf? jumlah huruf pun juga bisa bervariasi, tidak harus 5 seperti 'hello'. Berikut beberapa text yg punya hash 2.
Text Integer Sum Hashbye 2.25.5 32 2
confidential 3.15.14.6.9.4.5.14.20.9.1.12 112 2
enemy 5.14.5.13.25 62 2
dsb…
Perlu dicatat disini, bahwa tabulasi diatas adalah ilustrasi bagaimana hash dikatakan sebagai sebuah fungsi yg tidak dapat di dekripsi. Dalam contoh diatas hasil hash sudah sangat acak sehingga kita tidak dapat mengetahui lagi apakah sebuah hash yg ingin kita dekripsi punya kandungan huruf e / z / m / lainnya. Algoritma SHA Dengan Java.

Kegunaan

Menurut Kaufman et. al. (2002), Fungsi hash dapat digunakan sebagai:
  • Menyimpan Password
  • Sebagai Message Integrity
  • Sebagai Message Fingerprint
  • Menyimpan Password
Password didalam sebuah sistem dianjurkan untuk disimpan dg menggunakan fungsi hash. dg demikian administrator sistem tersebut sekalipun tidak akan dapat melihat / menggunakan password user yg telah jadi membernya. Hal ini akan memberikan impact yg baik untuk user bahwa baik sistem maupun administrator sangat menghargai privasi dari anggotanya.

Selain itu pula, jika database password pengguna, dg cara tertentu dapat diakses oleh publik, maka siapapun tetap tidak langsung dapat menggunakan password tersebut. Untuk menggunakan password yg telah publicly accessible terlebih dahulu seorang hacker harus melakukan buteforce terhadap kumpulan password-password teresbut.

Message Integrity

Andaikata Alice ingin mengirimkan pesan untuk Bob. Untuk mencegah ada seseorang ditengah perjalanan yg ingin mengganti pesan tersebut, Alice melakukan hash terhadap pesannya sendiri yg kemudian dikirim bersama dg pesannya yg asli. Namun, ternyata apa yg Alice lakukan tidak menjamin integritas keamanan pesan miliknya. Seseorang tetap dapat mengubahnya & menyediakan fungsi hash dari pesan tersebut

Alice bermaksud mengirimkan pesan ‘Hello Bob’ untuk Bob. Alice kemudian mengirimkan pesan tersebut bersama dg fungsi hash MD5 dari pesannya, yaitu b4c9c3086946666f7ec8014629e105f7. Alice mengirimkan pesan & hash MD5 nya melalui jasa pengantar barang, TIKI. Ditengah perjalanan, Eve berhasil mencuri pesan Alice untuk Bob dari sang kurir TIKI. Eve membuat pesan baru yg berbunyi ‘Hello Honey’, membuat hash MD5 dari pesannya tersebut, & mengembalikannya kedalam tas sang Kurir tanpa sepengetahuan sang Kurir. Algoritma SHA Dengan Java.

Kurir yg baik hati tersebut memberikan pesan Alice tadi untuk Bob. Ketika Bob membacanya, Bob merasakan ada yg aneh terhadap pesan tersebut. Bob mengecek hash MD5 dari pesan yg dibacanya, namun pengecekan MD5 pesan yg diterima Bob dg MD5 yg dikirim bersama paket tersebut cocok. Tapi apakah Bob tahu pesan yg bertuliskan ‘Hello Honey’ tersebut memang berasal dari Alice?

Dalam kasus ini tentu saja Bob tidak punya cara untuk mengetahui keabsahan pesan tersebut hanya dari paket yg berisi pesan & MD5 yg katanya dikirim oleh Alice. Hal ini tidak akan terjadi jika Alice & Bob menggunakan sejumlah karakter rahasia yg hanya diketahui oleh kedua orang tersebut. Karakter-karakter rahasia ini disebut juga dg nama keyed hash. Penggunan karakter ini disebut sebagai message integrity, dimana cara pengunaannya adalah sebelum dilakukannya hash, Alice terlebih dahulu menggabungkan pesannya dg karakter rahasia tersebut.

Jika pesan Alice adalah ‘Hello Bob’ & karakter rahasia Alice & Bob adalah 1234, maka hasil hash yg dibuat oleh Alice akan bernilai 508e1ae04417ccb03953aa2a320d1714. Jika Eve berhasil mencuri pesan Alice tersebut & menggantinya dg pesan miliknya sendiri, & karena Eve tidak mengetahui karakter rahasia milik Alice & Bob, Eve berasumsi bahwa MD5 yg dikirim oleh Alice tidak mengikutsertakan keyed hash sehingga ia hanya melakukan MD5 terhadap pesannya ‘Hello honey’ tersebut. Bob yg kemudian menerima pesan yg kata sang kurir berasal dari Alice mengecek integritas dari pesan yg katanya dari Alice tersebut dg cara menambahkan keyed hash miliknya kedalam pesan yg diterima tersebut. Setelah dilakukan hash terhadap pesan 'Hello Honey1234' Bob dg yakin dapat mengatakan bahwa pesan tersebut bukan berasal dari Alice.
Pesan Keyed    Hash MD5
‘Hello Bob’  b4c9c3086946666f7ec8014629e105f7
‘Hello Honey’ e42afb241fceefa05e3e897fa0686f14
‘Hello Bob’ 1234 508e1ae04417ccb03953aa2a320d1714
‘Hello Honey’ 1234 7dc14667a10ce5116b50f4d8a7e1ad9c

PERBANDINGAN SHA-1 & MD5

Karena SHA-1 & MD5 dikembangkan / diturunkan dari MD4 maka keduanya punya kemiripan satu sama lain, baik kekuatan & karakteristiknya.

Berikut perbedaan dari SHA-1 & MD5
  1. Keamanan terhadapserangan brute-force. Hal yg paling penting adalah bahwa SHA-1 menghasilkan diggest 32-bit lebih panjang dari MD5. dg brute-force maka SHA-1 lebihkuat dibanding MD5.
  2. Keamanan terhadap kriptanalisis. Kelemahan MD5 ada pada design sehingga lebih mudah dilakukan kriptanalisis dibandingkan SHA-1
  3. Kecepatan. Kedua algoritma bekerja pada modulo 232 sehingga keduanya bekerja baik pada arsitektur 32 bit. SHA-1 punya langkah lebih banyak dibandingkan MD5 ( 80 dibanding MD5 64 ) & harus memproses 160 bit buffer dibanding DM5 128 bit buffer, sehingga SHA-1 bekerja lebih lambat dibanding MD5 pada perangkat keras yg sama.
  4. Simplicity. Kedua algoritma simple untuk dijelaskan & mudah untuk diiemplementasikan karena tidak membutuhkan program yg besar / table subtitusi yg besar pula.

CARA KERJA SHA 

Pesan diberi tambahan untuk membuat panjangnya jadi kelipatan 512 bit ( l x 512 ). Jumlah bit asal adalah k bit. Tambahkan bit secukupnya sampai 64 bit kurangnya dari kelipatan 512 ( 512 – 64 = 448 ), yg disebut juga kongruen dg 448 ( mod 512 ). Kemudian tambahkan 64 bit yg menyatakan panjang pesan. Inisiasi 5 md variable dg panjang 32 bit yaitu a,b,c,d,e. Pesan dibagi jadi blok-blok berukuran 512 bit & setiap blok diolah. Kemudian keluaran setiap blok digabungkan dg keluaran blok berikutnya, sehingga diperoleh output ( diggest ). Fungsi kompresi yg digunakan oleh algoritma sha-1 adalah sebagai berikut : A,b,c,d,e ← ( e + f (t,b,c,d) + s5 (a) + wt + kt),a,s30(b),c,d.]

Berikut adalah beberapa cara kerja SHA

Preprocessing

Pesan ditambah dg sejumlah bit pengganjal sedemikian sehingga panjang pesan dalam satuan bit kongruen dg 448 modul 0 512. Ini berarti panjang pesan setelah ditambahi bit pengganjal adalah 64 bit kurang dari kelipatan 512. Panjang bit pengganjal haruslah berada antara 1 hingga 512 bit. Hal itu menyebabkan pesan dg panjang 448 tetap harus ditambahkan bit penygga sehingga panjang nya akan jadi 960 bit. Bit pengganjal sendiri terdiri dari sebuah bit 1 diikuti sisanya dg bit 0. Penambahan nilai panjang pesan semula 64 bit akan jadi kelipatan 512 bit. Algoritma SHA – 1 dalam operasi nya membutuhkan lima buah buffer yg masing masing besarnya 32 bit. Sehingga hasil akhir nya akan jadi 160 bit. Kelima buffer tersebut dalam operasi SHA – 1 ini akan berperan untuk menyimpan hasil antar putaran sekaligus untuk menyimpan hasil akhir.

Hashing

Proses hashing dilakukan perblok dg besar 512 bit tiap bloknya. Dalam pengolahan ini terdapat 4 putaran yg tiap putarannya dilakukan sebanyak 20 kali. Tiap putaran punya proses yg berbeda. Sebelum putaran pertama dilakukan inisialisasi 5 buah variable dg besar 32 bit yg menampung buffer inisialisasi.

Kelebihan SHA 

  • Validate a Password (memvalidasi password) ; Nilai hash dari password akan disimpan, kemudian ketika password diotentikasi, maka password yg dimasukkan oleh user akan dihitung hashnya & jika hashnya sesuai maka password dinyatakan valid. Namun untuk mendapatkan password yg asli tidak dapat diperoleh dari hash yg telah disimpan.
  • Challenge Handshake Authentication ; Untuk menghindari kesalahan pengiriman password dalam kondisi “clear”, client dapat mengirim nilai hash sebuah password melalui internet untuk divalidasi oleh server tanpa beresiko disadapnya password yg asli.
  • Anti-Tamper ; Untuk memastikan data tidak berubah selama ditransmisikan. Penerima akan menghitung nilai hash & mencocokkan dg hash yg dikirimkan, apabila nilainya sama berarti data yg dikirimkan tidak berubah.
  • Digital Signatures ; Dilakukan dg cara mengenkrip nilai hash sebuah dokumen dg menggunakan private key, sehingga menghasilkan tanda tangan digital untuk dokumen tersebut. Orang lain dapat mengecek otentikasi dokumen tersebut dg cara mendekrip tanda tangan tersebut menggunakan public key untuk mendapatkan nilai hash yg asli & membandingkannya dg nilai hash dari teks.

Contoh Program SHA dengan Java

File checksum dengan SHA-256


Source Code Java

import java.io.FileInputStream;
import java.security.MessageDigest;

public class SHACheckSumExample 
{
    public static void main(String[] args)throws Exception
    {
        MessageDigest md = MessageDigest.getInstance("SHA-256");
        FileInputStream fis = new FileInputStream("c:\\loging.log");
        
        byte[] dataBytes = new byte[1024];
     
        int nread = 0; 
        while ((nread = fis.read(dataBytes)) != -1) {
          md.update(dataBytes, 0, nread);
        };
        byte[] mdbytes = md.digest();
     
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < mdbytes.length; i++) {
          sb.append(Integer.toString((mdbytes[i] & 0xff) + 0x100, 16).substring(1));
        }

        System.out.println("Hex format : " + sb.toString());
     
        StringBuffer hexString = new StringBuffer();
     for (int i=0;i<mdbytes.length;i++) {
       hexString.append(Integer.toHexString(0xFF & mdbytes[i]));
     }

     System.out.println("Hex format : " + hexString.toString());
    }
}



Output :

Hex format : 21a57f2fe765e1ae4a8bf15d73fc1bf2a533f547f2343d12a499d9c0592044d4
Hex format : 21a57f2fe765e1ae4a8bf15d73fc1bf2a533f547f2343d12a499d9c0592044d4




Hashing String dengan SHA256

Source Code Java

import java.security.MessageDigest;

public class SHAHashingExample 
{
    public static void main(String[] args)throws Exception
    {
     String password = "123456";
     
        MessageDigest md = MessageDigest.getInstance("SHA-256");
        md.update(password.getBytes());
        
        byte byteData[] = md.digest();
 
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < byteData.length; i++) {
         sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
        }
     
        System.out.println("Hex format : " + sb.toString());
        
        StringBuffer hexString = new StringBuffer();
     for (int i=0;i<byteData.length;i++) {
      String hex=Integer.toHexString(0xff & byteData[i]);
          if(hex.length()==1) hexString.append('0');
          hexString.append(hex);
     }
     System.out.println("Hex format : " + hexString.toString());
    }
}



Output :

Hex format : 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
Hex format : 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92


Referesi

  1. http://en.wikipedia.org/wiki/SHA_hash_functions
  2. http://java.sun.com/j2se/1.4.2/docs/guide/security/CryptoSpec.html#AppA



Algoritma SHA Dengan Java

Fungsi Hash adalah sebuah algoritma yg mengubah text / message jadi sederetan karakter acak yg punya jumlah karakter yg sama. Hash juga termasuk salah satu bentuk teknik kriptografi & dikategorikan sebagai kriptografi tanpa key (unkeyed cryptosystem). Selain itu hash punya nama lain yg juga dikenal luas yaitu “one-way function”.

Kita sering sekali menjumpai hash di website-website yg menyediakan layanan untuk download file /pun program secara resmi. Hash memang umumnya digunakan untuk mengecek integritas dari sebuah pesan / file. File / pesan yg sudah berubah akan punya nilai hash yg berbeda. Sebagai contoh, dg sebuah algoritma hash, pesan'hello' akan memberikan nilai hash 12345 sedangkan pesan 'hallo' punya nilai hash83746. dg kata lain output hash dari kata 'hello' tidak akan sama dg 'hallo'. Bahkan sekalipun dalam kacamata kita kedua pesan tersebut terlihat hanya punya perbedaan sedikit saja, namun nilai hash yg dimiliki oleh kedua pesan tersebut sangat jauh berbeda.

Algoritma SHA Dengan Java
Algoritma SHA Dengan Java

Fungsi hash SHA adalah sekumpulan fungsi hash didesain oleh National Security Agency & dipublikasikan oleh NIST sebagai U.S Federal Information Processing Standard (FIPS). SHA adalah singkatan dari Secure Hash Algorithm. SHS (Secure Hash Standard) adalah standar yg mendefinisikan SHA. Ada banyak versi SHA. SHA-0, SHA-1, SHA-2. Se&gkan untuk SHA-2 terbagi lagi jadi SHA-224, SHA-256, SHA-384, and SHA-512. Di sini hanya akan dibahas mengenai SHA-1. SHA-1 menghasilkan 160 bit message diggest dari pesan yg panjangnya kurang dari 264 bit. SHA-1 hampir mirip dg MD4 tetapi dg beberapa perubahan.

Berbeda dg teknik enkripsi dalam kriptografi, tujuan hash memang mengubah sebuah pesan yg dapat dibaca (readable text) jadi pesan acak (unreadable text) sama seperti enkripsi, namun hal mendasar yg jadi perbedaan dari hash adalah pesan yg telah acak tadi tidak dapat diubah kembali jadi pesan yg seharusnya. Inilah mengapa hash disebut juga sebagai “one-way function“.

Algoritma SHA Dengan Java

Ketika pertama kali belajar konsep hash, enkripsi, & dekripsi, saya mencoba bersikap kritis dg mengambil hipotesis bahwa dg algoritma yg tepat, hash pasti dapat dibalikkan (reverse). dg kata lain keyakinan saya terhadap dekripsi sebuah fungsi hash sangat besar. Namun, keyakinan saya tidak terbukti. Penjelasannya seperti ini:

Misalkan ada pesan ‘Hello’, pesan ini akan kita hash dg algoritma yg sederhana, yaitu pertama-tama huruf-huruf tersebut akan kita ubah kedalam bilangan angka.
a jadi 1
b jadi 2
c jadi 3
dst…
Sehingga pesan 'hello' akan jadi '8.5.12.12.15'. Kemudian kita jumlahkan bilangan-bilangan tersebut sehingga kata 'hello' akan menghasilkan jumlah 52.
h e l l o 8 + 5 + 12 + 12 + 15 = 52
Kemudian langkah terakhir adalah kita ambil satu digit yg paling belakang sebagai nilai hashnya, yaitu 2. Nah nilai hash 2 ini bukankah bisa dibuat dari banyak kombinasi huruf? jumlah huruf pun juga bisa bervariasi, tidak harus 5 seperti 'hello'. Berikut beberapa text yg punya hash 2.
Text Integer Sum Hashbye 2.25.5 32 2
confidential 3.15.14.6.9.4.5.14.20.9.1.12 112 2
enemy 5.14.5.13.25 62 2
dsb…
Perlu dicatat disini, bahwa tabulasi diatas adalah ilustrasi bagaimana hash dikatakan sebagai sebuah fungsi yg tidak dapat di dekripsi. Dalam contoh diatas hasil hash sudah sangat acak sehingga kita tidak dapat mengetahui lagi apakah sebuah hash yg ingin kita dekripsi punya kandungan huruf e / z / m / lainnya. Algoritma SHA Dengan Java.

Kegunaan

Menurut Kaufman et. al. (2002), Fungsi hash dapat digunakan sebagai:
  • Menyimpan Password
  • Sebagai Message Integrity
  • Sebagai Message Fingerprint
  • Menyimpan Password
Password didalam sebuah sistem dianjurkan untuk disimpan dg menggunakan fungsi hash. dg demikian administrator sistem tersebut sekalipun tidak akan dapat melihat / menggunakan password user yg telah jadi membernya. Hal ini akan memberikan impact yg baik untuk user bahwa baik sistem maupun administrator sangat menghargai privasi dari anggotanya.

Selain itu pula, jika database password pengguna, dg cara tertentu dapat diakses oleh publik, maka siapapun tetap tidak langsung dapat menggunakan password tersebut. Untuk menggunakan password yg telah publicly accessible terlebih dahulu seorang hacker harus melakukan buteforce terhadap kumpulan password-password teresbut.

Message Integrity

Andaikata Alice ingin mengirimkan pesan untuk Bob. Untuk mencegah ada seseorang ditengah perjalanan yg ingin mengganti pesan tersebut, Alice melakukan hash terhadap pesannya sendiri yg kemudian dikirim bersama dg pesannya yg asli. Namun, ternyata apa yg Alice lakukan tidak menjamin integritas keamanan pesan miliknya. Seseorang tetap dapat mengubahnya & menyediakan fungsi hash dari pesan tersebut

Alice bermaksud mengirimkan pesan ‘Hello Bob’ untuk Bob. Alice kemudian mengirimkan pesan tersebut bersama dg fungsi hash MD5 dari pesannya, yaitu b4c9c3086946666f7ec8014629e105f7. Alice mengirimkan pesan & hash MD5 nya melalui jasa pengantar barang, TIKI. Ditengah perjalanan, Eve berhasil mencuri pesan Alice untuk Bob dari sang kurir TIKI. Eve membuat pesan baru yg berbunyi ‘Hello Honey’, membuat hash MD5 dari pesannya tersebut, & mengembalikannya kedalam tas sang Kurir tanpa sepengetahuan sang Kurir. Algoritma SHA Dengan Java.

Kurir yg baik hati tersebut memberikan pesan Alice tadi untuk Bob. Ketika Bob membacanya, Bob merasakan ada yg aneh terhadap pesan tersebut. Bob mengecek hash MD5 dari pesan yg dibacanya, namun pengecekan MD5 pesan yg diterima Bob dg MD5 yg dikirim bersama paket tersebut cocok. Tapi apakah Bob tahu pesan yg bertuliskan ‘Hello Honey’ tersebut memang berasal dari Alice?

Dalam kasus ini tentu saja Bob tidak punya cara untuk mengetahui keabsahan pesan tersebut hanya dari paket yg berisi pesan & MD5 yg katanya dikirim oleh Alice. Hal ini tidak akan terjadi jika Alice & Bob menggunakan sejumlah karakter rahasia yg hanya diketahui oleh kedua orang tersebut. Karakter-karakter rahasia ini disebut juga dg nama keyed hash. Penggunan karakter ini disebut sebagai message integrity, dimana cara pengunaannya adalah sebelum dilakukannya hash, Alice terlebih dahulu menggabungkan pesannya dg karakter rahasia tersebut.

Jika pesan Alice adalah ‘Hello Bob’ & karakter rahasia Alice & Bob adalah 1234, maka hasil hash yg dibuat oleh Alice akan bernilai 508e1ae04417ccb03953aa2a320d1714. Jika Eve berhasil mencuri pesan Alice tersebut & menggantinya dg pesan miliknya sendiri, & karena Eve tidak mengetahui karakter rahasia milik Alice & Bob, Eve berasumsi bahwa MD5 yg dikirim oleh Alice tidak mengikutsertakan keyed hash sehingga ia hanya melakukan MD5 terhadap pesannya ‘Hello honey’ tersebut. Bob yg kemudian menerima pesan yg kata sang kurir berasal dari Alice mengecek integritas dari pesan yg katanya dari Alice tersebut dg cara menambahkan keyed hash miliknya kedalam pesan yg diterima tersebut. Setelah dilakukan hash terhadap pesan 'Hello Honey1234' Bob dg yakin dapat mengatakan bahwa pesan tersebut bukan berasal dari Alice.
Pesan Keyed    Hash MD5
‘Hello Bob’  b4c9c3086946666f7ec8014629e105f7
‘Hello Honey’ e42afb241fceefa05e3e897fa0686f14
‘Hello Bob’ 1234 508e1ae04417ccb03953aa2a320d1714
‘Hello Honey’ 1234 7dc14667a10ce5116b50f4d8a7e1ad9c

PERBANDINGAN SHA-1 & MD5

Karena SHA-1 & MD5 dikembangkan / diturunkan dari MD4 maka keduanya punya kemiripan satu sama lain, baik kekuatan & karakteristiknya.

Berikut perbedaan dari SHA-1 & MD5
  1. Keamanan terhadapserangan brute-force. Hal yg paling penting adalah bahwa SHA-1 menghasilkan diggest 32-bit lebih panjang dari MD5. dg brute-force maka SHA-1 lebihkuat dibanding MD5.
  2. Keamanan terhadap kriptanalisis. Kelemahan MD5 ada pada design sehingga lebih mudah dilakukan kriptanalisis dibandingkan SHA-1
  3. Kecepatan. Kedua algoritma bekerja pada modulo 232 sehingga keduanya bekerja baik pada arsitektur 32 bit. SHA-1 punya langkah lebih banyak dibandingkan MD5 ( 80 dibanding MD5 64 ) & harus memproses 160 bit buffer dibanding DM5 128 bit buffer, sehingga SHA-1 bekerja lebih lambat dibanding MD5 pada perangkat keras yg sama.
  4. Simplicity. Kedua algoritma simple untuk dijelaskan & mudah untuk diiemplementasikan karena tidak membutuhkan program yg besar / table subtitusi yg besar pula.

CARA KERJA SHA 

Pesan diberi tambahan untuk membuat panjangnya jadi kelipatan 512 bit ( l x 512 ). Jumlah bit asal adalah k bit. Tambahkan bit secukupnya sampai 64 bit kurangnya dari kelipatan 512 ( 512 – 64 = 448 ), yg disebut juga kongruen dg 448 ( mod 512 ). Kemudian tambahkan 64 bit yg menyatakan panjang pesan. Inisiasi 5 md variable dg panjang 32 bit yaitu a,b,c,d,e. Pesan dibagi jadi blok-blok berukuran 512 bit & setiap blok diolah. Kemudian keluaran setiap blok digabungkan dg keluaran blok berikutnya, sehingga diperoleh output ( diggest ). Fungsi kompresi yg digunakan oleh algoritma sha-1 adalah sebagai berikut : A,b,c,d,e ← ( e + f (t,b,c,d) + s5 (a) + wt + kt),a,s30(b),c,d.]

Berikut adalah beberapa cara kerja SHA

Preprocessing

Pesan ditambah dg sejumlah bit pengganjal sedemikian sehingga panjang pesan dalam satuan bit kongruen dg 448 modul 0 512. Ini berarti panjang pesan setelah ditambahi bit pengganjal adalah 64 bit kurang dari kelipatan 512. Panjang bit pengganjal haruslah berada antara 1 hingga 512 bit. Hal itu menyebabkan pesan dg panjang 448 tetap harus ditambahkan bit penygga sehingga panjang nya akan jadi 960 bit. Bit pengganjal sendiri terdiri dari sebuah bit 1 diikuti sisanya dg bit 0. Penambahan nilai panjang pesan semula 64 bit akan jadi kelipatan 512 bit. Algoritma SHA – 1 dalam operasi nya membutuhkan lima buah buffer yg masing masing besarnya 32 bit. Sehingga hasil akhir nya akan jadi 160 bit. Kelima buffer tersebut dalam operasi SHA – 1 ini akan berperan untuk menyimpan hasil antar putaran sekaligus untuk menyimpan hasil akhir.

Hashing

Proses hashing dilakukan perblok dg besar 512 bit tiap bloknya. Dalam pengolahan ini terdapat 4 putaran yg tiap putarannya dilakukan sebanyak 20 kali. Tiap putaran punya proses yg berbeda. Sebelum putaran pertama dilakukan inisialisasi 5 buah variable dg besar 32 bit yg menampung buffer inisialisasi.

Kelebihan SHA 

  • Validate a Password (memvalidasi password) ; Nilai hash dari password akan disimpan, kemudian ketika password diotentikasi, maka password yg dimasukkan oleh user akan dihitung hashnya & jika hashnya sesuai maka password dinyatakan valid. Namun untuk mendapatkan password yg asli tidak dapat diperoleh dari hash yg telah disimpan.
  • Challenge Handshake Authentication ; Untuk menghindari kesalahan pengiriman password dalam kondisi “clear”, client dapat mengirim nilai hash sebuah password melalui internet untuk divalidasi oleh server tanpa beresiko disadapnya password yg asli.
  • Anti-Tamper ; Untuk memastikan data tidak berubah selama ditransmisikan. Penerima akan menghitung nilai hash & mencocokkan dg hash yg dikirimkan, apabila nilainya sama berarti data yg dikirimkan tidak berubah.
  • Digital Signatures ; Dilakukan dg cara mengenkrip nilai hash sebuah dokumen dg menggunakan private key, sehingga menghasilkan tanda tangan digital untuk dokumen tersebut. Orang lain dapat mengecek otentikasi dokumen tersebut dg cara mendekrip tanda tangan tersebut menggunakan public key untuk mendapatkan nilai hash yg asli & membandingkannya dg nilai hash dari teks.

Contoh Program SHA dengan Java

File checksum dengan SHA-256


Source Code Java

import java.io.FileInputStream;
import java.security.MessageDigest;

public class SHACheckSumExample 
{
    public static void main(String[] args)throws Exception
    {
        MessageDigest md = MessageDigest.getInstance("SHA-256");
        FileInputStream fis = new FileInputStream("c:\\loging.log");
        
        byte[] dataBytes = new byte[1024];
     
        int nread = 0; 
        while ((nread = fis.read(dataBytes)) != -1) {
          md.update(dataBytes, 0, nread);
        };
        byte[] mdbytes = md.digest();
     
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < mdbytes.length; i++) {
          sb.append(Integer.toString((mdbytes[i] & 0xff) + 0x100, 16).substring(1));
        }

        System.out.println("Hex format : " + sb.toString());
     
        StringBuffer hexString = new StringBuffer();
     for (int i=0;i<mdbytes.length;i++) {
       hexString.append(Integer.toHexString(0xFF & mdbytes[i]));
     }

     System.out.println("Hex format : " + hexString.toString());
    }
}



Output :

Hex format : 21a57f2fe765e1ae4a8bf15d73fc1bf2a533f547f2343d12a499d9c0592044d4
Hex format : 21a57f2fe765e1ae4a8bf15d73fc1bf2a533f547f2343d12a499d9c0592044d4




Hashing String dengan SHA256

Source Code Java

import java.security.MessageDigest;

public class SHAHashingExample 
{
    public static void main(String[] args)throws Exception
    {
     String password = "123456";
     
        MessageDigest md = MessageDigest.getInstance("SHA-256");
        md.update(password.getBytes());
        
        byte byteData[] = md.digest();
 
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < byteData.length; i++) {
         sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
        }
     
        System.out.println("Hex format : " + sb.toString());
        
        StringBuffer hexString = new StringBuffer();
     for (int i=0;i<byteData.length;i++) {
      String hex=Integer.toHexString(0xff & byteData[i]);
          if(hex.length()==1) hexString.append('0');
          hexString.append(hex);
     }
     System.out.println("Hex format : " + hexString.toString());
    }
}



Output :

Hex format : 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
Hex format : 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92


Referesi

  1. http://en.wikipedia.org/wiki/SHA_hash_functions
  2. http://java.sun.com/j2se/1.4.2/docs/guide/security/CryptoSpec.html#AppA


Algoritma SHA Dengan Java| Contoh Program

Source CodeAlgoritma SHA Dengan Java

Source Code Tutorial belajar Gratis download Flow Chart PDF ZIP RAR DOC Java C# Visual Basic VB PHP Matlab C++ Penerapan implementasi metode algoritma pemrograman

Tutorial belajarAlgoritma SHA Dengan Java

VB PHP Matlab C++ Penerapan implementasi metode algoritma pemrograman Source Code Tutorial belajar Gratis download Flow Chart PDF ZIP RAR DOC Java C# Visual Basic

Gratis downloadAlgoritma SHA Dengan Java

Chart PDF ZIP RAR DOC Java C# Visual Basic VB PHP Matlab C++ Penerapan implementasi metode algoritma pemrograman Source Code Tutorial belajar Gratis download Flow

Penerapan implementasiAlgoritma SHA Dengan JavaAlgoritma SHA Dengan Java

Posted by: Metode-Algoritma.comAlgoritma SHA Dengan Java| Contoh ProgramUpdated at :







Konsultasi Gratis

Jika ada yang ingin di tanyakan, Kamu bisa melakukan konsultasi gratis kepada team metode-algoritma.com melalui form di bawah. Mohon isi email dengan benar, karena hasil konsultasi akan di kirimkan ke email kamu.


Algoritma SHA Dengan Java| Contoh Program

Label:,

Copyright © 2013 metode-algoritma.com Allright Reserved|about|sitemap|

Konsultasi gratis