首页  >  文章  >  后端开发  >  如何在没有 syscall 或 scrypt 的情况下安全地在 Golang/App Engine 中对密码进行哈希处理?

如何在没有 syscall 或 scrypt 的情况下安全地在 Golang/App Engine 中对密码进行哈希处理?

Linda Hamilton
Linda Hamilton原创
2024-10-30 08:26:02573浏览

How to Securely Hash Passwords in Golang/App Engine Without syscall or scrypt?

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn