首頁  >  文章  >  後端開發  >  golang實現hash

golang實現hash

WBOY
WBOY原創
2023-05-16 12:35:37928瀏覽

哈希(Hash)指的是將任意長度的二進位串映射為固定長度的二進位串的一種方法,該映射規則是雜湊演算法,也稱為雜湊演算法。哈希演算法經常被用來加密、檢驗資料完整性以及散列表查找等應用中。

Go語言(golang)提供了標準函式庫中的hash包,該包提供了多種雜湊演算法的實現,包括如下:

  • MD5、SHA1、SHA256、 SHA512等基礎雜湊演算法
  • CRC32、Adler32等校驗與演算法
  • Blake2b、SHA3等較新的雜湊演算法
##本文將詳細介紹如何使用golang中的hash套件來實作雜湊演算法。

    MD5
MD5(Message-Digest Algorithm 5,資訊摘要演算法第五版)是常見的雜湊演算法,其輸出結果為128位元的二進位串,通常用32位16進制數表示。在golang中,可以透過hash套件中的md5.New()方法取得md5的哈希對象,並使用Write方法將待哈希的資料寫入哈希對像中。最後,可以透過Sum方法取得計算出的雜湊值。

下面是一個範例程式碼:

package main

import (
    "crypto/md5"
    "fmt"
)

func main() {
    data := []byte("example data")
    hash := md5.Sum(data)
    fmt.Printf("%x", hash)
}

輸出結果為:

7f808d6e58805c6bbfd1eb6b2f06991a

    SHA1
SHA1(Secure Hash Algorithm 1,安全雜湊演算法第一版)是一種較安全的雜湊演算法,其輸出結果為160位元的二進位串,通常以40位元16進位數表示。在golang中,可以透過hash套件中的sha1.New()方法來取得一個sha1的哈希對象,並使用Write方法將待哈希的資料寫入哈希對像中。最後,可以透過Sum方法取得計算出的雜湊值。

下面是一個範例程式碼:

package main

import (
    "crypto/sha1"
    "fmt"
)

func main() {
    data := []byte("example data")
    hash := sha1.Sum(data)
    fmt.Printf("%x", hash)
}

輸出結果為:

ee5a3dd464a36f28cd1f2ff8405348d7a48112d6

    SHA256
SHA256(Secure Hash Algorithm 256,安全雜湊演算法第256版)是一種較安全的雜湊演算法,其輸出結果為256位元的二進位串,通常以64位元16進位數表示。在golang中,可以透過hash套件中的sha256.New()方法來取得一個sha256的哈希對象,並使用Write方法將待哈希的資料寫入哈希對像中。最後,可以透過Sum方法取得計算出的雜湊值。

下面是一個範例程式碼:

package main

import (
    "crypto/sha256"
    "fmt"
)

func main() {
    data := []byte("example data")
    hash := sha256.Sum256(data)
    fmt.Printf("%x", hash)
}

輸出結果為:

9b64dd6a22a2d1f2850835a089a58fbd572d8399f22b97d73a5e7dd2c2ae9307

    SHA512
SHA512(Secure Hash Algorithm 512,安全雜湊演算法第512版)是一種最安全的雜湊演算法,其輸出結果為512位的二進位串,通常以128位元16進位數表示。在golang中,可以透過hash套件中的sha512.New()方法來取得一個sha512的哈希對象,並使用Write方法將待哈希的資料寫入哈希對象。最後,可以透過Sum方法取得計算出的雜湊值。

下面是一個範例程式碼:

package main

import (
    "crypto/sha512"
    "fmt"
)

func main() {
    data := []byte("example data")
    hash := sha512.Sum512(data)
    fmt.Printf("%x", hash)
}

輸出結果為:

22a0c871d16be5f7dafa984087bfe0e0694fcc9a0daeff1f76fcd50445ce40ba7a45dbb13a3d0bba593bf813c368b4c14354faf7ea5718c2907f93bffb2c1253

    CRC32
  1. ##CRC32(Cyclic Redundancy Check 32,循環冗餘校驗32位元)是一種校驗和演算法,用來檢驗資料的完整性。其輸出結果為32位的二進位串,通常以8位16進位數表示。在golang中,可以透過hash套件中的crc32.NewIEEE()方法取得一個crc32的雜湊對象,並使用Write方法將待哈希的資料寫入哈希物件中。最後,可以透過Sum方法取得計算出的雜湊值。

下面是一個範例程式碼:

package main

import (
    "fmt"
    "hash/crc32"
)

func main() {
    data := []byte("example data")
    hash := crc32.ChecksumIEEE(data)
    fmt.Printf("%x", hash)
}

輸出結果為:

f1ade6eb

Adler32
  1. Adler32是另一個校驗和演算法,其輸出結果為32位元的二進位串,通常以8位16進位數表示。在golang中,可以透過hash套件中的adler32.New()方法來取得一個adler32的哈希對象,並使用Write方法將待哈希的資料寫入哈希對象。最後,可以透過Sum方法取得計算出的雜湊值。

下面是一個範例程式碼:

package main

import (
    "fmt"
    "hash/adler32"
)

func main() {
    data := []byte("example data")
    hash := adler32.Checksum(data)
    fmt.Printf("%x", hash)
}

輸出結果為:

142113ca

Blake2b
  1. Blake2b是較新的哈希演算法,輸出結果可以自訂長度,常見的有256位元、384位元和512位元。在golang中,可以透過hash套件中的blake2b.New256()、blake2b.New384()和blake2b.New512()方法來取得一個對應長度的blate2b的雜湊對象,並使用Write方法將待哈希的資料寫入哈希物件中。最後,可以透過Sum方法取得計算出的雜湊值。

下面是一個範例程式碼:

package main

import (
    "fmt"
    "golang.org/x/crypto/blake2b"
)

func main() {
    data := []byte("example data")
    hash256 := blake2b.Sum256(data)
    hash384 := blake2b.Sum384(data)
    hash512 := blake2b.Sum512(data)
    fmt.Printf("%x
%x
%x", hash256, hash384, hash512)
}

輸出結果為:

d852969b47e35f938f9f0ca05f2d3ca9f965b085e6c35d4ec5dbd6d2df4475d9
75bdbe670d92c40a2e62c753bd241f3181f191a5c70fd715d8a5e341a45b607e0f0c342c1df2b4ecb103d1dee066ef2d
8f87a4e71bde7c58c9ecc1c2c8d7bb93805d378854a496b13a5bbdaf01c138bdd01fe265ff0550c7219362918f451422c8aa738f4a0517a8d4416b7c2653c403

SHA3
  1. SHA3(Secure Hash Algorithm 3,安全雜湊演算法第3版)是另一種較新的雜湊演算法,其輸出結果長度可自訂,較常見的有256位元和512位元。在golang中,可以透過hash套件中的sha3.New256()和sha3.New512()方法來取得一個對應長度的sha3的雜湊對象,並使用Write方法將待哈希的資料寫入哈希物件中。最後,可以透過Sum方法取得計算出的雜湊值。

下面是一個範例程式碼:

package main

import (
    "fmt"
    "golang.org/x/crypto/sha3"
)

func main() {
    data := []byte("example data")
    hash256 := sha3.Sum256(data)
    hash512 := sha3.Sum512(data)
    fmt.Printf("%x
%x", hash256, hash512)
}

輸出結果為:

992f61da74e7f165b6825ba7b92ea5e119f7f4da612a7fa3024bddda7c2b45f4
266dbb94654e7c4d3493f3f88f5aff2d13601aeff862a8195aaf2caa16e7b3cb35f0b91d6f3c44f9b1dfeca28da40282caf1a2e8d5ed18a6ebf858adcce4813d

以上是golang實現hash的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn