Bcrypt password hashing in Golang (compatible with Node.js)?

后端 未结 3 1721
情深已故
情深已故 2020-12-12 14:22

I set up a site with Node.js+passport for user authentication.

Now I need to migrate to Golang, and need to do authentication with the user passwords saved in db. <

相关标签:
3条回答
  • 2020-12-12 14:45

    Using the golang.org/x/crypto/bcrypt package, I believe the equivalent would be:

    hashedPassword, err := bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost)
    

    Working example:

    package main
    
    import (
        "golang.org/x/crypto/bcrypt"
        "fmt"
    )
    
    func main() {
        password := []byte("MyDarkSecret")
    
        // Hashing the password with the default cost of 10
        hashedPassword, err := bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost)
        if err != nil {
            panic(err)
        }
        fmt.Println(string(hashedPassword))
    
        // Comparing the password with the hash
        err = bcrypt.CompareHashAndPassword(hashedPassword, password)
        fmt.Println(err) // nil means it is a match
    }
    
    0 讨论(0)
  • 2020-12-12 14:50

    Firstly you need import the bcrypt package

    go get golang.org/x/crypto/bcrypt
    

    Then use GenerateFromPassword

    bs, err := bcrypt.GenerateFromPassword([]byte(p), bcrypt.MinCost)
        if err != nil {
            http.Error(w, "Internal server error", http.StatusInternalServerError)
            return
        }
    
    0 讨论(0)
  • 2020-12-12 14:57

    Take a look at the bcrypt package from go.crypto (docs are here).

    To install it, use

    go get golang.org/x/crypto/bcrypt
    

    A blog entry describing the usage of the bcrypt package can be found here. It's from the guy who wrote the package, so it should work ;)

    One difference to the node.js library you are using is that the go package doesn't have an (exported) genSalt function, but it will generate the salt automatically when you call bcrypt.GenerateFromPassword.

    0 讨论(0)
提交回复
热议问题