在 Golang/App Engine 中安全地散列密码,无需系统调用或 scrypt
虽然 bcrypt 和 scrypt 通常用于密码散列,但它们可能不由于系统调用可访问性,适合 App Engine。作为替代方案,请考虑利用 go.crypto 库进行安全密码散列。
go.crypto 包提供对 pbkdf2 和 bcrypt 的支持。两种实现均完全用 Go 编写,确保与 App Engine 的兼容性。
1.使用 bcrypt
使用以下步骤实现 bcrypt:
<code class="bash">go get golang.org/x/crypto/bcrypt</code>
示例用法:
<code class="go">import "golang.org/x/crypto/bcrypt" func clear(b []byte) { for i := 0; i < len(b); i++ { b[i] = 0; } } func Crypt(password []byte) ([]byte, error) { defer clear(password) return bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost) } ctext, err := Crypt(pass) if err != nil { log.Fatal(err) } fmt.Println(string(ctext))</code>
这将产生类似于以下内容的输出:
a$sylGijT5CIJZ9ViJsxZOS.IB2tOtJ40hf82eFbTwq87iVAOb5GL8e
2。使用 pbkdf2
对于使用 pbkdf2 的简单哈希:
<code class="go">import "golang.org/x/crypto/pbkdf2" func HashPassword(password, salt []byte) []byte { defer clear(password) return pbkdf2.Key(password, salt, 4096, sha256.Size, sha256.New) } pass := []byte("foo") salt := []byte("bar") fmt.Printf("%x\n", HashPassword(pass, salt))</code>
以上是如何在没有 syscall 或 scrypt 的情况下安全地在 Golang/App Engine 中对密码进行哈希处理?的详细内容。更多信息请关注PHP中文网其他相关文章!