Skip to content

Heshlash(hashing)

Heshlash — bu ma'lumotlardan qat'iy uzunlikdagi xesh qiymat hosil qilish jarayoni. Masalan, parollarni saqlashda yoki fayllarni tekshirishda ishlatiladi. Go tilida crypto va hash paketlarida turli heshing algoritmlari mavjud masalan:

  • MD5 - tez, ammo xavfsiz emas (faqat tekshirish uchun).
  • SHA-1 - MD5'dan biroz xavfsizroq, lekin hozir ishlatish tavsiya qilinmaydi.
  • SHA-256, SHA-512 - xavfsizroq va ko'p ishlatiladi.
  • bcrypt, scrypt, argon2 - parollar uchun maxsus sekinroq ishlaydi.

Amaliyotni oddiy misol SHA-256 bilan boshlasak. Buning uchun crypto/sha256 va encoding/hex paketlarini import qilishimiz kerak bo'ladi. crypto/sha256 asosiy heshlashni amalga oshiradi va natijada bayt massivi hosil bo'ladi. encoding/hex bayt massivini odam o'qiy oladigan shaklga (hexadecimal string) o'tkazib beradi.

Misol:

package main

import (
    "crypto/sha256"
    "encoding/hex"
    "fmt"
)

func main() {
    data := "salom dunyo"

    // Heshlash
    hash := sha256.Sum256([]byte(data))

    // Hash qiymatini bayt ko'rinishda chiqarish
    fmt.Println("SHA-256 byte:", hash)
    // Hash qiymatini hex ko'rinishda chiqarish
    fmt.Println("SHA-256 hex:", hex.EncodeToString(hash[:]))
}

Natija:

SHA-256 byte: [61 36 16 115 186 228 17 164 90 133 206 37 179 65 90 225 241 179 41 21 168 12 127 217 225 176 117 70 82 111 102 92]
SHA-256 hex: 3d241073bae411a45a85ce25b3415ae1f1b32915a80c7fd9e1b07546526f665c

MD5

MD5 (Message-Digest Algorithm 5) kiritilgan ma'lumotdan aniq uzunlikdagi 128-bit (16 bayt) hesh qiymatini hosil qiluvchi heshing algoritmi. Xavfsizlik darajasi yuqori bo'lmaganligi sababli parollarni saqlashda ishlatish tavsiya etilmaydi.

Misol:

package main

import (
    "crypto/md5"
    "encoding/hex"
    "fmt"
)

func main() {
    data := "salom dunyo"

    // MD5 hash
    hash := md5.Sum([]byte(data))

    // Hex ko'rinishda chiqarish
    fmt.Println("MD5:", hex.EncodeToString(hash[:]))
}

Natija:

MD5: 8f4b0e175285a09d3bff44f0fdec2e0f

Base64

Bu binar ma'lumotlarni matnga o'girish uchun ishlatiladigan encode usuli. Har qanday faylni (rasm, video, binar) faqat ASCII belgilaridan iborat matnga o'giradi. Natija odatda asl ma'lumotdan 33% kattaroq bo'ladi. Base64 hesh mattni ortga qaytarish mumkin.

Misol:

package main

import (
    "encoding/base64"
    "fmt"
)

func main() {
    data := "salom dunyo"

    // Encode - matnni Base64 ga o'girish
    encoded := base64.StdEncoding.EncodeToString([]byte(data))
    fmt.Println("Base64 encoded:", encoded)

    // Decode - Base64 heshni matnga o'girish)
    decoded, _ := base64.StdEncoding.DecodeString(encoded)
    fmt.Println("Base64 decoded:", string(decoded))
}

Natija:

Base64 encoded: c2Fsb20gZHVueW8=
Base64 decoded: salom dunyo