Go в примери: Хешове от вида SHA256

Хешовете1 от вида SHA256 се ползват често за изчисляване на кратки обозначения за тъждество към пред-определени2 двоични или словни количества от данни. Например удостоверенията TLS/SSL използват SHA256, за да изчислят (и укажат еднозначно) подпис за удостоверение (сертификат). Ето как се изчисляват хешове от вида SHA256 в Го.


  1. hash – хеш (в случая) неповторима и еднозначна смесица от знаци, обозначаваща еднопосочно точно определено нещо, но скриваща самото нещо и служеща като белег и единствено съответстие на нещото според определен алгоритъм. Виж https://eurodict.com/dictionary/hash-32797 и https://en.wikipedia.org/wiki/SHA-2 (Secure Hash Algorithm 2)
  2. blob – binary large object (https://en.wikipedia.org/wiki/Object_storage). Пред-определени - предварително определена (и позната) съхранена съвкупност от данни.
package main

Го осъществява няколко хеш функции в различни пакети в областта crypto/*.

import (
    "crypto/sha256"
    "fmt"
)
func main() {
    s := "sha256 this string"

Тук начеваме нов хеш.

    h := sha256.New()

Методът Write очаква да му бъдат подадени данни от вида []byte. Ако имате низ s, използвайте израза []byte(s), за да сведете низа до отрязък от байтове.

    h.Write([]byte(s))

Това действие ни връща завършения хеш като отрязък от байтове. Подаденият на Sum допълнителен отрязък от байтове може да се постави пред вече съществуващия хеш, но това обикновено не е нужно. ТОДО: да намреря къде и за какво може да се ползва тази представка.

    bs := h.Sum(nil)
    prebs := h.Sum([]byte(`pre`))
    fmt.Println(s)
    fmt.Printf("%70x\n%70x\n", bs, prebs)
}

Като пуснем програмата, виждаме, че тя изчислява хеша и го показва в четим за човек шестнадесетичен вид.

$ go run sha256-hashes.go
sha256 this string
      1af1dfa857bf1d8814fe1af8983c18080019922e557f15a8a0d3d…
7072651af1dfa857bf1d8814fe1af8983c18080019922e557f15a8a0d3d…

Можете да изчислите и други видове хешове, ползващи подобен на използвания по-горе подход. Например, за да използвате SHA512, внесете пакета crypto/sha512 и използвайте функцията му sha512.New().

Ако ви е нужен криптографски сигурен хеш, трябва да прочетете внимателно (https://en.wikipedia.org/wiki/Cryptographichashfunction)!

Следващ пример: .