Hash SHA-1
Sidik jari data untuk integritas dan pembandingan.
Pahami konsepnya
Fungsi hash mengubah data ukuran apa pun menjadi sidik jari tetap — SHA-1 selalu 20 byte. Input sama memberi hasil sama, sementara perubahan kecil pada input biasanya mengubah banyak digit hash. Karena itu hash berguna untuk mendeteksi perubahan dan menamai cache.
Di Go: buat hasher dengan sha1.New(), isi lewat Write (bisa bertahap untuk data besar), lalu Sum(nil) menyerahkan hasil []byte. Untuk string pendek, semua bisa sebaris. Hasil biner biasa ditampilkan heksadesimal lewat fmt.Sprintf("%x", h) atau hex.EncodeToString.
Catatan keamanan penting: SHA-1 sudah terbukti rentan terhadap tumbukan — jangan gunakan untuk tanda tangan, sertifikat, atau menyimpan password. Untuk integritas yang membutuhkan ketahanan kriptografis gunakan SHA-256; untuk password gunakan algoritme khusus seperti bcrypt atau Argon2. SHA-1 masih bisa dipakai untuk checksum non-keamanan seperti penamaan cache.
Coba contoh kode
package main
import (
"crypto/sha1"
"fmt"
)
func sidikJari(teks string) string {
h := sha1.Sum([]byte(teks))
return fmt.Sprintf("%x", h)
}
func main() {
fmt.Println(sidikJari("golang"))
fmt.Println(sidikJari("Golang")) // satu huruf beda = hasil total beda
}sha1.Sum adalah pintasan untuk input yang muat sekaligus — hasilnya array [20]byte. %x merendernya heksadesimal. Perhatikan efek longsoran: "golang" dan "Golang" hanya beda satu huruf kecil-besar, tetapi sidik jarinya berubah total — itulah yang membuat hash peka mendeteksi perubahan.
SHA-256 versi modern
func main() {
data := []byte("materi penting")
h := sha256.New()
h.Write(data)
fmt.Printf("%x\n", h.Sum(nil))
}Antarmuka sha256 identik dengan sha1 — New, Write, Sum — hanya hasilnya 32 byte dan algoritmanya belum tertumbukkan. Pola New/Write bertahap juga memungkinkan meng-hash berkas besar per potongan tanpa memuat semuanya ke memori.
Latihan singkat
Uji: bandingkan sidik jari `golang` dan `Golang` — bila keduanya berbeda program harus mencetak persis `beda`.