Hashing adalah transformasi aritmatik sebuah string dari karakter menjadi nilai yang merepresentasikan string aslinya. Menurut bahasanya, hash berarti memenggal dan kemudian menggabungkan. Hashing digunakan sebagai metode untuk menyimpan data dalam sebuah array agar penyimpanan data, pencarian data, penambahan data, dan penghapusan data dapat dilakukan dengan cepat. Ide dasarnya adalah menghitung posisi record yang dicari dalam array, bukan membandingkan record dengan isi pada array. Fungsi yang mengembalikan nilai atau kunci disebut fungsi hash (hash function) dan array yang digunakan disebut tabel hash (hash table). Hash table menggunakan struktur data arrayasosiatif yang mengasosiasikan record dengan sebuah field kunci unik berupa bilangan (hash) yang merupakan representasi dari record tersebut.
Secara teori, kompleksitas waktu (T(n)) dari fungsi hash yang ideal adalah O(1). Untuk mencapai itu setiap record membutuhkan suatu kunci yang unik. Fungsi hash menyimpan nilai asli atau kunci pada alamat yang sama dengan nilai hashnya. Pada pencarian suatu nilai pada tabel hash, yang pertama dilakukan adalah menghitung nilai hash dari kunci atau nilai aslinya, kemudian membandingkan kunci atuau nilai asli dengan isi pada memori yang beralamat nomor hashnya. Dengan cara ini, pencarian suatu nilai dapat dilakukan dengan cepat tanpa harus memeriksa seluruh isi tabel satu per satu.
Selain digunakan pada penyimpanan data, fungsi hash juga digunakan pada algoritma enkripsi sidik jari digital (fingerprint) untuk mengautentifikasi pengirim dan penerima pesan. Sidik jari digital diperoleh dengan fungsi hash, kemudian nilai hash dan tanda pesan yang asli dikirim kepada penerima pesan. Dengan menggunakan fungsi hash yang sama dengan pengirim pesan, penerima pesan mentransformasikan pesan yang diterima. Nilai hash yang diperoleh oleh penerima pesan kemudian dibandingkan dengan nilai hash yang dikirim pengirim pesan.
Kedua nilai hash harus sama, jika tidak, pasti ada masalah. Hashing selalu merupakan fungsi satu arah. Fungsi hash yang ideal tidak bisa diperoleh dengan melakukan reverse engineering dengan menganalisa nilai hash. Fungsi hashyang ideal juga seharusnya tidak menghasilkan nilai hash yang sama dari beberapa nilai yang berbeda . Jika hal yang seperti ini terjadi, inilah yang disebut dengan bentrokan (collision). Kemungkinan terjadinya bentrokan tidak dapat dihindari seratus persen. Fungsi hash yang baik dapat meminimalkan kemungkinan terjadinya bentrokan.2. Macam - Macam Fungsi Hash Fungsi Hash (dilambangkan dengan h(k)) bertugas untuk mengubah k (key) menjadi suatu nilai dalam interval [0....X], dimana "X" adalah jumlah maksimum dari record-record yang dapat ditampung dalam tabel. Jumlah maksimum ini bergantung pada ruang memori yang tersedia. Fungsi Hash yang ideal adalah mudah dihitung dan bersifat random, agar dapat menyebarkan semua key. Dengan key yang tersebar, berarti data dapat terdistribusi secara seragam bentrokan dapat dicegah. Sehingga kompleksitas waktu model Hash dapat mencapai O(1), di mana kompleksitas tersebut tidak ditemukan pada struktur model lain. Ada beberapa macam fungsi hash yang relatif sederhana yang dapat digunakan dalam penyimpanan database:a. Metode Pembagian Bersisa (division-remainder method) Jumlah lokasi memori yang tersedi dihitung, kemudian jumlah tersebut digunakan sebagai pembagi untuk membagi nilai yang asli dan menghasilkan sisa. Sisa tersebut adalah nilai hashnya. Secara umum, rumusnya h(k)= k mod m. Dalam hal ini m adalah jumlah lokasi memori yang tersedia pada array. Fungsihash tersebut menempatkan record dengan kunci K pada suatu lokasi memori yang beralamat h(k). Metode ini sering menghasilkan nilai hash yang sama dari dua atau lebih nilai aslinya atau disebut dengan bentrokan. Karena itu, dibutuhkan mekanisme khusus untuk menangani bentrokan yang disebut kebijakan resolusi bentrokan.b. Melipat (folding) Metode ini membagi nilai asli ke dalam beberapa bagian, kemudian menambahkan nilai-nilai tersebut, dan mengambil beberapa angka terakhir sebagai nilai hashnya. c. Transformasi Radiks (radix transformation) Karena nilai dalam bentuk digital, basis angka atau radiks dapat diganti sehingga menghasilkan urutan angka-angka yang berbeda. Contohnya nilai desimal (basis 10) bisa ditransformasikan kedalam heksadesimal (basis 16). Digit atas hasilnya bisa dibuang agar panjang nilai hash dapat seragam.d. Pengaturan ulang digit (digit rearrangement) Metode ini mengubah urutan digit dengan pola tertentu. Contohnya mengambil digit ke tiga sampai ke enam dari nilai aslinya, kemudian membalikan urutannya dan menggunakan digit yang terurut terbalik itu sebagai nilai hash. Fungsi hash yang bekerja dengan baik untuk penyimpanan pada database belum tentu bekerja dengan baik untuk keperluan kriptografi atau pengecekan kesalahan. Ada beberapa fungsi hash terkenal yang digunakan untuk keperluan kriptografi. Diantaranya adalah fungsi hash message-diggest, contohnya MD2, MD4, dan MD5, digunakan untuk menghasilkan nilai hash dari tanda tangan digital yang disebut messagediggest. Ada pula Secure HashAlgorithm (SHA), sebuah algoritma standar yang menghasilkan message-diggest yang lebih besar (60-bit) dan serupa dengan MD4.3. Bentrokan Pada Fungsi Hash Fungsi hash bukan merupakan fungsi satu-ke-satu, artinya beberapa recordyangberbeda dapat menghasilkan nilai hash yang sama / terjadi bentrokan. Dengan fungsi hash yang baik, hal seperti ini akan sangat jarang terjadi, tapi pasti akan terjadi. Jika hal seperti ini terjadi, record-record tersebut tidak bisa menempati lokasi yang sama. Ada dua macam kebijakan resolusi bentrokan pada tabel hash, yaitu kebijakan resolusi bentrokan di luar tabel dan kebijakan resolusi bentrokan di dalam tabel. Harus diperhatikan juga teknik-teknik penempatan record agar mudah dicari jika dibutuhkan.•> Kebijakan resolusi bentrokan di luar tabel Artinya tabel hash bukan lagi menjadi array of records, tetapi menjadi array of pointers. Setiap pointer menunjuk ke senarai berkait yang berisi recordtersebut. Metode seperti ini dinamakan chaining. Dalam bentuk sederhananya berupa senarai berkait dari recordrecord yang menghasilkan nilai hash yang sama. Penambahan record dapat dilakukan dengan menambah senarai berisirecord tersebut. Untuk pencarian pada tabel, pertama-tama dicari nilai hashterlebih dahulu, kemudian dilakukan pencarian dalam senarai berkait yang bersangkutan. Untuk menghapus suatu record, hanya menghapus senarainya saja. Kelebihan dari metode chaining ini chaining ini adalah proses penghapusan yang relarif mudah dan penambahan ukuran tabel hash bisa ditunda untuk waktu yang lebih lama karena penurunan kinerjanya berbanding lurus meskipun seluruh lokasi pada tabel sudah penuh. Bahkan, penambahan ukuran tabel bisa saja tidak perlu dilakukan sama sekali karena penurunan kinerjanya yang linier. Misalnya, tabel yang berisi record sebanyak dua kali lipat kapasitas yang direkomendasikan hanya akan lebih lambat dua kali lipat dibanding yang berisi sebanyak kapasitas yang direkomendasikan. Kekurangan dari metodechaining ini sama dengan kekurangan dari senarai berkait. Operasi traversal pada senarai berkait memiliki performa cache yang buruk. Struktur data lain dapat digunakan sebagai pengganti senarai berkait. Misalnya dengan pohon seimbang, kompleksitas waktu terburuk bisa diturunkan menjadi O(log n) dari yang sebelumnya O(n). Namun demikian, karena setiap senarai diharapkan untuk tidak panjang, struktur data pohon ini kurang efisien kecuali tabel hash tersebut memang didesain untuk jumlahrecord yang banyak atau kemungkinan terjadi bentrokan sangat besar yang mungkin terjadi karena masukan memang disengaja agar terjadi bentrokan.•> Kebijakan resolusi bentrokan di dalam tabel Berbeda dengan kebijakan resolusi bentrokan di luar tabel, pada kebijakan resolusi di dalam tabel data disimpan di dalam hash tabel tersebut, bukan dalam senarai berkait yang bertambah terus menerus. Dengan demikian data yang disimpan tidak mungkin bisa lebih banyak daripada jumlah ruang pada tabelhash. Jika suatu record akan dimasukkan ke dalam tabel hash pada lokasi sesuai nilai hash-nya dan ternyata lokasi tersebut sudah diisi dengan record lain maka harus dicari lokasi alternatif yang masih belum terisi dengan cara tertentu. Cara ini disebut Open Addressing. Ada beberapa metode untuk menemukan lokasi baru yang masih kosong. Dalam proses menemukan lokasi baru ini harus menggunakan pola tertentu agarrecord yang disimpan tetap bisa dicari dengan mudah saat dibutuhkan kemudian. Metode-metode yang sering digunakan adalah:1. Linear probing Dengan menambahkan suatu interval pada hasil yang diperoleh dari fungsihash sampai ditemukan lokasi yang belum terisi. Interval yang biasa digunakan adalah 2. Quadratic probing / squared probing Hampir sama dengan linear probing, hanya saja pada quadratic probing, hasil yang diperoleh dari fungsi hash ditambahkan dengan kuadrat dari interval yang digunakan. 3. Double hashing Pada metode double hashing, jika lokasi yang diperoleh dengan fungsi hashsudah terisi, maka dilakukan proses hash lagi sampai ditemukan lokasi yang belum terisi. •> Perbandingan antara metode chaining dan open addressingKeunggulan metode chaining dibanding open addressing:1. Lebih mudah diimplementasikan dengan efektif dan hanya membutuhkan struktur data dasar.2. Metode chaining tidak rawan terhadap data-data yang berkumpul di daerah tertentu. Metode open addressing membutuhkan algoritma hash yang lebih baik untuk menghindari pengumpulan data di sekitar lokasi tertentu. 3. Performa menurun secara linier. Meskipun semakin banyak record yang dimasukkan maka semakin panjang senarai berantai, tabel hash tidak akan penuh dan tidak akan menimbulkan peningkatan waktu pencarian record yang tibatiba meningkat yang terjadi bila menggunakan metode open addressing.4. Jika record yang dimasukkan panjang, memori yang digunakan akan lebih sedikit dibandingkan dengan metode open addressing. Perbandingan waktu yang diperlukan untuk melakukan pencarian. Saat tabel mencapai 80% terisi, kinerja pada linear probing(open addressing)menurun drastis. Untuk ukuranrecord yang kecil, keunggulan metode open addressing dibandingkan denganchaining diantaranya Ruang yang digunakan lebih efisien karena tidak perlu menyimpan pointer atau mengalokasi tempat tambahan di luar tabel hash. Tidak ada waktu tambahan untuk pengalokasian memori karena metode open addressing tidak memerlukan pengalokasian memori.Tidak memerlukan pointer. Sebenarnya, penggunaan algoritma apapun pada tabel hash biasanya cukup cepat, dan persentase kalkulasi yang dilakukan pada tabel hash rendah. Penggunaan memori juga jarang berlebihan. Oleh karena itu, pada kebanyakan kasus, perbedaan antar algoritma ini tidak signifikan.•> Metode-metode lainSelain metode-metode yang sudah disebutkan di atas, ada juga beberapa metode lain diantaranya :1. Coalesced hashingGabungan dari chaining dan openaddressing. Coalesced hashingmenghubungkan ke tabel itu sendiri. Seperti open addressing, metode ini memiliki keunggulan pada penggunaan tempat dan cache dibanding metodechaining. Seperti chaining, metode ini menghasilkan lokasi penyimpanan yang lebih menyebar, tetapi pada metode ini record yang disimpan tidak mungkin lebih banyak daripada ruang yang disediakan tabel.2. Perfect hashingJika record yang akan digunakan sudah diketahui sebelumnya, dan jumlahnya tidak melebihi jumlah ruang pada tabel hash, perfect hashing bisa digunakan untuk membuat tabel hash yang sempurna, tanpa ada bentrokan.3. Probabilistic hashingKemungkinan solusi paling sederhana untuk mengatasi bentrokan adalah dengan mengganti record yang sudah disimpan dengan record yang baru, atau membuang record yang baru akan dimasukkan. Hal ini bisa berdampak tidak ditemukannya record pada saat pencarian. Metode ini digunakan untuk keperluan tertentu saja.4. Robin Hood hashingSalah satu variasi dari resolusi bentrokan double hashing. Ide dasarnya adalah sebuahrecord yang sudah dimasukkan bisa digantikan dengan record yang baru jika nilai pencariannya (probe count – bertambah setiap menemukan termpat yang sudah terisi) lebih besar daripada nilai pencarian dari record yang sudah dimasukkan. Efeknya adalah mengurangi kasus terburuk waktu yang diperlukan untuk pencarian.jenis - jenis hash
ADLER32: 0a020106
CRC-16: 6647
CRC-16-CCITT: 2bbd
CRC-32: 44ce9c5f
CRC-32B: 760d0e88
DES(Unix): 757va0lgB4kpM
Domain Cached Credentials: 6157b1b5dc56cda30bda606bfd021284
FCS-16: 4c8f
GHash-32-3: 000af961
GHash-32-5: 0713fc69
GOSTR34.11-94:0e8cd409a23c2e7ad1c5b22b101dfa16720550dc547921c7a099b75c7f405fd4
Haval128: 4691d973de3ad6d79321d7bff4757b59
Haval128(Base64): RpHZc9461teTIde/9HV7WQ==
Haval128(HMAC): 4691d973de3ad6d79321d7bff4757b59
Haval160: 21b54cd74fb54c7911a1e7077d5ac4fc90df7228
Haval160(Base64): IbVM10+1THkRoecHfVrE/JDfcig=
Haval160(HMAC): 21b54cd74fb54c7911a1e7077d5ac4fc90df7228
Haval192: 239169f332a1231516483b7122a23dc90fc026201b7ccedd
Haval192(Base64): I5Fp8zKhIxUWSDtxIqI9yQ/AJiAbfM7d
Haval192(HMAC): 239169f332a1231516483b7122a23dc90fc026201b7ccedd
Haval224: 0b3fb65f0ca5628e1674cd34f3e56a00e151e2241eb07fafd07c663b
Haval224(Base64): Cz+2XwylYo4WdM008+VqAOFR4iQesH+v0HxmOw==
Haval224(HMAC): 0b3fb65f0ca5628e1674cd34f3e56a00e151e2241eb07fafd07c663b
Haval256: 77c33a964e34c9feb8fec535b8632572e570533a47cd68a51fd633ea127c8a37
Haval256(Base64): d8M6lk40yf64/sU1uGMlcuVwUzpHzWilH9Yz6hJ8ijc=
Haval256(HMAC):77c33a964e34c9feb8fec535b8632572e570533a47cd68a51fd633ea127c8a37
Lineage II C4: 0x35f239833eba3637029bbdbd70eacccc
MD2: 3e3e6b0e5c1c68644fc5ce3cf060211d
MD2(Base64): Pj5rDlwcaGRPxc488GAhHQ==
MD2(HMAC): 3e3e6b0e5c1c68644fc5ce3cf060211d
MD4: f9d4049dd6a4dc35d40e5265954b2a46
MD4(Base64): +dQEndak3DXUDlJllUsqRg==
MD4(HMAC): f9d4049dd6a4dc35d40e5265954b2a46
MD5: 21232f297a57a5a743894a0e4a801fc3
MD5(HMAC): 21232f297a57a5a743894a0e4a801fc3
MD5(Base64): ISMvKXpXpadDiUoOSoAfww==
MD5(APR): $apr1$uR1Bf.3/$WAXAbNCkK0iuc5BT0lIzJ.
MD5(Unix): $1$Iem9Pn/M$.qqeH6cPqU3n42plTWcCe1
MD5(phpBB3): $H$9MEWSIwrGxt2KAgAh6h9XcEYNwZrBu/
MySQL: 43e9a4ab75570f5b
MySQL v5.x: 4acfe3202a5ff5cf467898fc58aab1d615029441
NTLM: 209c6174da490caeb422f3fa5a7ae634
RipeMD128: ed4060702b42311eb4f6c707b11f1999
RipeMD128(Base64): 7UBgcCtCMR609scHsR8ZmQ==
RipeMD128(HMAC): ed4060702b42311eb4f6c707b11f1999
RipeMD160: 7dd12f3a9afa0282a575b8ef99dea2a0c1becb51
RipeMD160(Base64): fdEvOpr6AoKldbjvmd6ioMG+y1E=
RipeMD160(HMAC): 7dd12f3a9afa0282a575b8ef99dea2a0c1becb51
RipeMD256: f87f405941cf41f0c2b5b1939e8a1f9edac7e03c7ceb1491ca5ef467f3bdc6db
RipeMD256(Base64):+H9AWUHPQfDCtbGTnoofntrH4Dx86xSRyl70Z/O9xts=
RipeMD256(HMAC):f87f405941cf41f0c2b5b1939e8a1f9edac7e03c7ceb1491ca5ef467f3bdc6db
SHA-1: d033e22ae348aeb5660fc2140aec35850c4da997
SHA224: 58acb7acccce58ffa8b953b12b5a7702bd42dae441c1ad85057fa70b
SHA256: 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
SHA384:9ca694a90285c034432c9550421b7b9dbd5c0f4b6673f05f6dbce58052ba20e4248041956ee8c9a2ec9f10290cdc0782
SHA512:c7ad44cbad762a5da0a452f9e854fdc1e0e7a52a38015f23f3eab1d80b931dd472634dfac71cd34ebc35d16ab7fb8a90c81f975113d6c7538dc69dd8de9077ec
MySQL5 : C512546FC98FD99ADEAAC0D6DA38C1FF72E5F962
LM : AAD3B435B51404EE62AA45053C7208D1
vbulletin : b11666b5be0c97e58123f2dde94a5b2f:
MySQL : 711de2ca756942dc
IPB :d764d51a989b33d9a1853ae2a767ee42:!@’jy
mysql323 : 6a534c81610e9992
SMF : 4312579034c651b689a1bf61a24d0e9d0040de55
e107: 4ab846c48db58da9999ef6e1800f3bf9
DES(Unix) : 84OrGPdVc./NU
*NIX Hashes : saQckLSwoF.wM
unix*: ¡·%*©G+wö mRåâ±m‰ë
1.MD4 (Message-Digest algortihm 4)
- MD4 dibuat oleh Ronald Rivest pada Oktober 1990, MD4 adalah hash function yang dipakai sebelum MD5, namun karena banyaknya kelemahan MD4 membuatnya diganti oleh MD5.
- panjang 16 bytes (32 karakter)
- contoh : 31d6cfe0d16ae931b73c59d7e0c089c0
2. MD5 (Message-Digest algortihm 5)
- MD5 di desain oleh Ronald Rivest pada tahun 1991 untuk menggantikan hash function sebelumnya, MD4. Pada tahun 1996 (http://id.wikipedia.org/wiki/MD5)
- digunakan di phpBB v2.x, Joomla versi dibawah 1.0.13 dan digunakan oleh beberapa CMS dan forum
- panjangnya 16 bytes (32 karakter)
- contoh : c4ca4238a0b923820dcc509a6f75849b
3. MD5($pass.$salt)
- Digunakan di WB News, Joomla versi 1.0.13 dan versi diatasnya
- panjang 16 bytes (32 karakter)
- hash yang satu ini dimulai dari hashnya duluan kemudian dilanjutkan oleh saltnya
- contoh : 6f04f0d75f6870858bae14ac0b6d9f73
4. MD5($salt.$pass)
- Digunakan di osCommerce, AEF, Gallery dan beberapa CMS lainnya
- panjang 16 bytes (32 karakter)
- hash yang satu ini dimulai dari saltnya duluan kemudian dilanjutkan oleh hashnya
- contoh : f190ce9ac8445d249747cab7be43f7d
5. md5(md5($pass).$salt)
- Digunakan di vBulletin, IceBB dan cms lainnya
- panjang 16 bytes (32 karakter)
- contoh : 6011527690eddca23580955c216b1fd2
6. MD5(WordPress)
- Digunakan di wordpress
- panjangnya 17 bytes (34 karakter)
- hashnya dimulai oleh tanda $P$ kemudian dilanjutkan oleh sebuah karakter (karakter yg paling sering dipakai adalah huruf “B”) kemudian dilanjutkan oleh saltnya (8 karakter yg disusun secara acak, dalam contoh ini saltnya adalah “12345678″) lalu dilanjutkan oleh hashnya
- contoh : $P$B123456780BhGFYSlUqGyE6ErKErL01
7. MD5(phpBB3)
- Digunakan di CMS phpBB 3.x.x
- panjangnya 17 bytes (34 karakter)
- hashnya oleh tanda $H$ lalu dilanjutkan oleh sebuah karakter (karakter yg paling sering dipakai adalah nomor “9″), kemudian dilanjutkan dengan saltnya (8 karakter yg disusun secara acak, dalam contoh yg saya berikan saltnya adalah “12345678″) kemudian dilanjutkan oleh hashnya
- contoh : $H$9123456785DAERgALpsri.D9z3ht120
8. SHA-1(Secure Hash Algorithm)
- Diciptakan oleh National Institue of Standars and Technology atau U.S. Federal Information Processing Standard digunakan oleh beberapa CMS dan beberapa forum
- panjangnya 20 bytes (40 karakter)
- contoh : 356a192b7913b04c54574d18c28d46e6395428ab
9. SHA-256(Secure Hash Algorithm)
- hashnya dimulai oleh tanda $5$ kemudian dilanjutkan dengan saltnya (8 karakter yg disusun secara acak, dalam contoh yg saya berikan saltnya adalah “12345678″) lalu dilanjutkan oleh karakter “$” kemudian dilanjutkan oleh hashnya
- panjang 55 karakter
- contoh : $5$12345678$jBWLgeYZbSvREnuBr5s3gp13vqi…
10. SHA-512(Secure Hash Algorithm)
- hashnya dimulai oleh tanda $6$ kemudian dilanjutkan dengan saltnya (8 karakter yg disusun secara acak, dalam contoh yg saya berikan saltnya adalah “12345678″) lalu dilanjutkan oleh karakter “$” kemudian dilanjutkan oleh hashnya
- panjang 98 karakter
- contoh : $6$12345678$U6Yv5E1lWn6mEESzKen42o6rbEm…
11. Base64
- algoritma yg berfungsi untuk encoding dan decoding suatu data ke dalam format ASCII. panjang maksimal 64 karakter hashnya terdiri dari A..Z, a..z dan 0..9, serta ditambah dengan dua karakter terakhir yang bersimbol yaitu + dan / serta satu buah karakter sama dengan “=”
- digunakan di beberapa forum dan CMS
- contoh : Y3liZXJfY3JpbWluYWw=
Situs untuk mengcrack hash:
http://www.md5decrypter.co.uk/ => decrypt MD5
http://www.md5decrypter.co.uk/sha1-decrypt.aspx => decrypt SHA1
http://base64-encoder-online.waraxe.us/ => decode/encode base64
dan masih banyak lagi