Skip to content
Santekno.com | Level Up Your Engineering Skills
ID
📖 0%
24 Oct 2022 · 2 mnt baca ·Artikel 18 / 119
Go

Mengenal Hashes Cryptography Pada Golang

IH
Ihsan Arif
Penulis di Santekno · Backend Engineer

Hashes & Cryptography

Fungsi hash mengambil satu set data dan menguranginya ke ukuran tetap yang lebih kecil. Hash sering digunakan dalam pemrograman untuk segala hal mulai dari mencari data hingga mendeteksi perubahan dengan mudah. Fungsi hash di Go dibagi menjadi dua kategori yaitu kriptografi dan non-kriptografi. Fungsi hash non-kriptografi dapat ditemukan di bawah paket hash dan termasuk adler32, crc32, crc64 dan fnv.

Berikut ini contoh menggunakan crc32:

go
 1package main
 2import (
 3     "fmt"
 4     "hash/crc32"
 5)
 6func main() {
 7     h := crc32.NewIEEE()
 8     h.Write([]byte("test"))
 9     v := h.Sum32()
10     fmt.Println(v)
11}

Hash crc32 mengimplementasikan interface Writer, sehingga kita dapat menulis byte padanya seperti Writer lainnya. Setelah kita menulis semua yang kita inginkan, kita memanggil Sum32() untuk mengembalikan uint32. Penggunaan umum untuk crc32 adalah untuk membandingkan dua file. Jika nilai Sum32 untuk kedua file sama, kemungkinan besar (meskipun tidak 100% yakin) bahwa file tersebut sama. Jika nilainya berbeda maka file tersebut pasti tidak sama.

Berikut membandingkan dua file dengan menggunakan crc32 dibawah ini.

go
 1package main
 2
 3import (
 4	"fmt"
 5	"hash/crc32"
 6	"io/ioutil"
 7)
 8
 9func getHash(filename string) (uint32, error) {
10	bs, err := ioutil.ReadFile(filename)
11	if err != nil {
12		return 0, err
13	}
14	h := crc32.NewIEEE()
15	h.Write(bs)
16	return h.Sum32(), nil
17}
18func main() {
19	h1, err := getHash("test1.txt")
20	if err != nil {
21		return
22	}
23	h2, err := getHash("test2.txt")
24	if err != nil {
25		return
26	}
27	fmt.Println(h1, h2, h1 == h2)
28}
Kita coba skenariokan misalkan kita isi file test1.txt dan test2.txt sebagai berikut:

  • test1.txt diisi hello world dan test2.txt diisi dengan hello world santekno –> ekspektasi data dari kedua file tersebut berbeda maka return (false)
  • test1.txt diisi hello world dan test2.txt diisi dengan hello world –> ekspektasi data dari kedua file tersebut sama, maka return (true)

Artikel Terkait

💬 Komentar