天天看點

在Golang中如何用scrypt對敏感資訊加密

0 依賴庫

mkdir -p $GOPATH/src/golang.org/x/
cd $GOPATH/src/golang.org/x/
git      

1 源碼

package main

import (
    "crypto/rand"
    "fmt"
    "golang.org/x/crypto/scrypt"
    "io"
    "log"
)

const (
    PW_SALT_BYTES = 8
    PW_HASH_BYTES = 32
    PASS_WORD     = "hello scrypt"
)

func main() {
    salt := make([]byte, PW_SALT_BYTES)
    _, err := io.ReadFull(rand.Reader, salt)
    if err != nil {
        log.Fatal(err)
    } else {
        fmt.Printf("salt=%v\n", salt)
    }

    hash, err := scrypt.Key([]byte(PASS_WORD), salt, 1<<15, 8, 1, PW_HASH_BYTES)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("encrypt=%x\n", hash)
}      

2 加密輸出資訊

salt=[199 154 209 249 70 17 5 214]
encrypt=80a6b84cb82f3c40fa86a2db787dfb4680e910aa21a1842644363f3903f97e61      

3 參考連結

  1. ​​equivalent salt and hash in golang​​
  2. ​​example_test.go​​